65 Commits
Author SHA1 Message Date
iChris4 23a498f7d2 GetMetroidHydraHudSettings per-draw GetGameID() calls removed 2026-06-21 04:34:19 +02:00
iChris4 c4b005b540 Metroid profile is now resolved once per session instead of per draw 2026-06-21 04:16:15 +02:00
iChris4 3e2093b537 Removed draw call filter 2026-06-20 23:34:46 +02:00
iChris4 d36e773823 Removed Clear EFB 2026-06-20 20:17:32 +02:00
iChris4 c61ca1ed0e Added Clear EFB 2026-06-20 19:42:50 +02:00
iChris4 30eeb5902b Locking vertical scroll for Candidates 2026-06-19 18:17:50 +02:00
iChris4 219ec35a3f Updated Profiles 2026-06-19 18:17:02 +02:00
iChris4 5a03bcef36 Updated Profile 2026-06-19 01:31:20 +02:00
iChris4 c5e1c03dc3 New "Projection Type" filter 2026-06-19 01:23:48 +02:00
iChris4 9a839ab7a3 EH Stops Recording Draws when box unchecked 2026-06-16 23:44:21 +02:00
iChris4 bf9e55b5fb Metroid XRayEffect Update 2026-06-16 23:21:13 +02:00
iChris4 54bd17d507 Removed skips for METROID_SCAN_ICONS and METROID_SCAN_CROSS 2026-06-16 22:37:20 +02:00
iChris4 9f775df19d Metroid Depth 3D HUD Using Grappeling Hook & Fix Scanner Lines 2026-06-16 01:05:06 +02:00
iChris4 954bd71aac Added Metroid 3D HUD Depth Fix Stable combat HUD body range 2026-06-15 01:11:44 +02:00
iChris4 31fcefd3d2 Metroid 3D HUD no longer anchors depth from the first draw 2026-06-14 01:42:13 +02:00
iChris4 b9592c3f69 Thermal Visor 3D HUD 2026-06-14 00:08:14 +02:00
iChris4 06592e5f52 Improve Vulkan OpenXR performance and compatibility 2026-06-13 22:26:39 +02:00
iChris4 e911bec8b3 Fix Metroid Prime 3D VR HUD 2026-06-13 22:26:22 +02:00
iChris4 3de35df672 Detect Skybox feature added 2026-06-09 04:01:12 +02:00
iChris4 43461d6249 TextureElementManager Added Preview Mode 2026-06-09 02:12:06 +02:00
iChris4 a365201647 Added Texture Element Override Tool 2026-06-06 02:11:42 +02:00
iChris4 8d0fbdc969 Add Metroid Prime 2 visor fixes 2026-06-05 01:58:36 +02:00
iChris4 b6eb5a946a Add D3D11 Metroid thermal palette fix 2026-06-04 19:12:42 +02:00
iChris4 ace44a8a1b Add Metroid Prime Vulkan visor fixes 2026-06-04 03:04:32 +02:00
iChris4 bd164a9cd0 Element Group Tool - Added Hide Codes & Removed Shaders 2026-05-16 00:14:17 +02:00
iChris4 a066e59df2 Hide Codes Update 2026-05-15 16:44:44 +02:00
iChris4 5aa7ae4e86 Hide Ojects Update 2026-05-15 04:35:42 +02:00
iChris4 04113519b6 Opcode Replay Added 72,90,120hz 2026-05-15 02:15:13 +02:00
iChris4 da596b84ed Default VR Position Selection 2026-05-14 20:42:16 +02:00
iChris4 2bedfe31bd Linux Debian VR Building Option 2026-05-14 18:56:58 +02:00
iChris4 c5c5984c85 Removed auto-update 2026-05-11 22:05:18 +02:00
iChris4 4c1c690c72 Added LockHeadPosePerFrame in per-game override 2026-05-11 01:57:35 +02:00
iChris4 f933865451 Ortho Scissor Fix Toggle 2026-05-11 01:48:33 +02:00
iChris4 2103012a9a Added VR Linux Build Option 2026-05-10 23:03:39 +02:00
iChris4andClaude Sonnet 4.6 dc45c33318 Android: Return-to-Main-Menu hotkey & filter functional hotkeys
Replaces the hard-coded OpenXR menu long-press shutdown with a
proper rebindable hotkey (HK_ANDROID_RETURN_TO_MAIN_MENU, HKGP_ANDROID
group), defaulting to a 3-second hold of the left controller's Menu
button. The hold threshold lives in HotkeyDispatcher to keep the input
side authoritative.

The Android settings UI now hides hotkey groups and individual controls
that have no dispatcher wiring, so users can't bind actions that would
silently no-op at runtime. Adds a Control.getName() JNI getter for
identifying functional controls by their untranslated C++ name.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:39:29 +02:00
iChris4andClaude Sonnet 4.6 df936c2976 VR Pane: add Reset Settings button for the General tab
Restores all General-tab VR settings (camera, virtual screen, frame
rate, rendering) to their compiled defaults in one click. Disabled
while emulation is running so resets can't race the active session.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:38:25 +02:00
iChris4andClaude Sonnet 4.6 148957b981 VR Pane: auto-enable camera Forward/Height when adjusting their slider
Both sliders now flip their respective Enable toggle to true the moment
the user drags them, so the value isn't silently ignored.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:37:21 +02:00
iChris4andClaude Sonnet 4.6 6442017d78 Add VR Forced VBI Frequency setting (Auto/72/90/120 Hz)
Replaces the boolean "Force VBI to 90 Hz" override with an explicit
choice across Off / Auto / 72 / 90 / 120 Hz. Auto samples the headset
refresh rate at OpenXR session startup (via XR_FB_display_refresh_rate)
and rounds to the closest supported value. Migrates the legacy
AutoVBIFromHMD setting on first load. Per-game profile editor and the
HK_VR_TOGGLE_FORCE_VBI hotkey are updated to cycle Off <-> Auto.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:36:55 +02:00
iChris4andClaude Sonnet 4.6 5878ccbad3 Fix Meta Link Vulkan crash from v1 1.0.0 max-version quirk
Meta's Oculus runtime reports max Vulkan 1.0.0 via XR_KHR_vulkan_enable
v1, which would clamp Dolphin's instance to 1.0 and crash vkCreateDevice
(multiview is a 1.1 feature). Treat 1.0.0 as "unknown" and keep the
negotiated 1.1/1.2 instance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:33:43 +02:00
iChris4andClaude Sonnet 4.6 2c42a38b1a Adjust VR default values
EnableOpenXR defaults true; AutoLayerSpread defaults false; raise
ElementDepth max from 0.1 to 10.0 for finer per-shader control.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:33:17 +02:00
iChris4andClaude Sonnet 4.6 fcd70c99ff Rebrand window title to Dolphin-VR-ReduX
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:32:46 +02:00
iChris4andClaude Sonnet 4.6 6e1d5199d3 Update GameSettingsVR profiles & add RMCP01
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-10 17:32:41 +02:00
iChris4andClaude Sonnet 4.6 d1511f187b Vulkan OpenXR: async frame finalization on Quest submit thread
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 01:17:29 +02:00
iChris4andClaude Sonnet 4.6 99a86bdda7 Android: add input bindings, hotkey dispatcher & OpenXR Wii Remote profile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 01:17:24 +02:00
iChris4andClaude Sonnet 4.6 1625a9618b Update GameSettingsVR profiles (21 games)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 01:17:17 +02:00
iChris4andClaude Sonnet 4.6 b13701af2a Add DolphinXR dev artifacts to .gitignore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 01:17:10 +02:00
iChris4 5ee1008ed5 Quest Performance Toggle & Controller Profiles 2026-05-05 16:01:31 +02:00
iChris4 49ad800936 Added Default GamesettingsVR 2026-05-03 14:43:33 +02:00
iChris4 c80961c437 Quest Vulkan Multiview fixes & Performances 2026-05-02 15:58:54 +02:00
iChris4 1b0eb14e15 Vukan Virtual Desktop Fix 2026-04-25 01:45:44 +02:00
iChris4 108e0728bb Quest Settings 2026-04-25 00:25:02 +02:00
iChris4 adaeeaf3d4 Fix for Vulkan 2026-04-24 16:15:01 +02:00
iChris4 2929ead841 Initial Support for Quest 2026-04-24 13:40:27 +02:00
iChris4 19ba9b05fa Opcode Replay Fix & Lock Head Pose Per Frame Fix 2026-04-23 16:43:59 +02:00
iChris4 8ecef6ef1e "FOCUSED" session state & Oculus/Meta profiles 2026-04-14 03:14:14 +02:00
Christophe 339a7ed52d Readme 2026-04-12 02:34:41 +02:00
Christophe 220a99b7a3 Readme 2026-04-12 02:32:04 +02:00
iChris4 49febf2cbe WII Controller Config Screen Overlay for OpenXR & Quest 3 Controller Fix 2026-04-12 02:08:02 +02:00
iChris4 95b569b681 WIP CullingCodeFinder 2026-04-11 18:11:02 +02:00
iChris4 677aa34050 Added ARMode by Clodo76 2026-04-11 18:08:04 +02:00
iChris4 4a70fd2fbe VR Pane UI 2026-04-10 19:51:45 +02:00
iChris4 1c16f73855 VRPane Settings 2026-04-09 02:11:22 +02:00
iChris4 2ed53222b4 Update Readme 2026-04-07 22:32:00 +02:00
iChris4 780b79b8d7 Add OpenXR as submodule 2026-04-07 00:37:56 +02:00
iChris4 a2dad38be5 Add OpenXR support and related VR changes 2026-04-07 00:18:01 +02:00
3261 changed files with 602183 additions and 379 deletions

No files matched your search

+8
View File
@@ -43,3 +43,11 @@ CMakeLists.txt.user
/.vscode/
# Ignore flatpak-builder's cache dir
.flatpak-builder
# DolphinXR dev artifacts
codex_apk_backups/
quest_perf_capture/
vulkan_pipeline_failures/
vulkan_pipeline_failures_latest/
vulkan_pipeline_failures_latest2/
quest_first_mv_vs.glsl
quest_mv_vs.glsl
+24
View File
@@ -93,6 +93,7 @@ option(ENABLE_CUBEB "Enables Cubeb sound backend" ON)
option(ENABLE_LLVM "Enables LLVM support, for disassembly" ON)
option(ENABLE_TESTS "Enables building the unit tests" ON)
option(ENABLE_VULKAN "Enables vulkan video backend" ON)
option(ENABLE_VR "Enables VR support via OpenXR (Windows D3D/Vulkan, Linux Vulkan, Android Vulkan)" OFF)
option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence, show the current game on Discord" ON)
option(USE_MGBA "Enables GBA controllers emulation using libmgba" ON)
option(ENABLE_AUTOUPDATE "Enables support for automatic updates" ON)
@@ -653,6 +654,29 @@ if(ENABLE_VULKAN)
endif()
endif()
set(DOLPHIN_OPENXR_SUPPORTED_PLATFORM OFF)
if(WIN32 OR ANDROID OR (UNIX AND NOT APPLE AND NOT ANDROID))
set(DOLPHIN_OPENXR_SUPPORTED_PLATFORM ON)
endif()
if(ENABLE_VR AND NOT DOLPHIN_OPENXR_SUPPORTED_PLATFORM)
message(WARNING "OpenXR VR is only supported on Windows, desktop Linux, and Android; disabling ENABLE_VR.")
set(ENABLE_VR OFF CACHE BOOL "Enables VR support via OpenXR (Windows D3D/Vulkan, Linux Vulkan, Android Vulkan)" FORCE)
endif()
if(ENABLE_VR AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT ENABLE_VULKAN)
message(FATAL_ERROR "Desktop Linux OpenXR VR requires ENABLE_VULKAN=ON.")
endif()
if(ENABLE_VR)
add_definitions(-DENABLE_VR)
# Build only the OpenXR loader from the Khronos SDK; skip tests, conformance, and samples.
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(BUILD_CONFORMANCE_TESTS OFF CACHE BOOL "" FORCE)
set(DYNAMIC_LOADER OFF CACHE BOOL "" FORCE)
add_subdirectory(Externals/OpenXR "${CMAKE_BINARY_DIR}/Externals/OpenXR" EXCLUDE_FROM_ALL)
endif()
if(NOT (WIN32 AND _M_ARM_64))
# OpenGL is available on all platforms except windows-arm64
add_definitions(-DHAS_OPENGL)
+257
View File
@@ -0,0 +1,257 @@
[Graphics.VR]
UnitsPerMeter = 50.00
VirtualScreen = False
[ElementsGroupOverride_Enable]
$Links Room
$HUD
$HUD Hearts
$HUD Rupees
$HUD A Button
[ElementsGroupOverride]
$Links Room
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=200
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=000000002b3a6cc8
selected_match_0_ps_family=a18f84adfc97a006
selected_match_0_gs_family=000000007b617113
$HUD
format=element_only_v5
handling=screen
selected_match_mode=exclude
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=580
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00240808
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=000000002b3a6cc8
selected_match_0_ps_family=b764624a1e0f616d
selected_match_0_gs_family=000000007b617113
selected_match_0_texture=23ede90952dd36ba
selected_match_0_texture=e8c66917316dc5c9
$HUD Hearts
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-16
sig_ortho_right=16
sig_ortho_top=12
sig_ortho_bottom=-12
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$HUD Rupees
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=31
sig_ortho_top=0
sig_ortho_bottom=23
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00240808
sig_ztest=0
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$HUD A Button
format=element_only_v5
handling=screen
sig_perspective=1
sig_persp_hfov=6
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=6
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=759
sig_vp_y=405
sig_vp_w=45
sig_vp_h=45
sig_sc_l=714
sig_sc_t=360
sig_sc_r=803
sig_sc_b=449
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Cinematic Bars
format=element_only_v5
handling=skip
selected_match_mode=exclude
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=31
sig_ortho_top=0
sig_ortho_bottom=23
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=000000002b3a6cc8
selected_match_0_ps_family=363402bb73543a71
selected_match_0_gs_family=000000007b617113
selected_match_1_vs_family=00000000c161bcae
selected_match_1_ps_family=2b150fd7aa6db824
selected_match_1_gs_family=000000002b78268c
selected_match_1_texture=163a23cb1a409882
selected_match_1_texture=b4678a9489894b4a
selected_match_2_vs_family=000000002b3a6cc8
selected_match_2_ps_family=9b3c96cefbfc107b
selected_match_2_gs_family=000000007b617113
selected_match_2_texture=163a23cb1a409882
selected_match_2_texture=9d6bd48078fea672
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
Hash=000000001d369b69
Type=PS
match_mode=exact_hash
handling=screen
$HUD Rupees
Hash=000000003b812110
Type=PS
match_mode=exact_hash
handling=screen
$HUD Life and Text
Hash=000000006d383ab2
Type=PS
match_mode=exact_hash
handling=screen
$HUD Hearts
Hash=00000000ff3d987d
Type=PS
match_mode=exact_hash
handling=screen
+51
View File
@@ -0,0 +1,51 @@
[Graphics.VR]
UnitsPerMeter = 1.5
HudThickness = 0.5
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_1_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_XRAY_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_1_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_THERMAL_EFFECT
profile_layer=METROID_THERMAL_EFFECT_GUN
profile_layer=METROID_CHARGE_BEAM_EFFECT
profile_layer=METROID_XRAY_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_1_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+43
View File
@@ -0,0 +1,43 @@
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_2_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_DARK_CENTRAL
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_2_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_2_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+147
View File
@@ -0,0 +1,147 @@
[Graphics.VR]
UnitsPerMeter = 1.5
[ShaderOverride_Enable]
$HUD Scan Effect
$HUD Scan color
[ShaderOverride]
$Warning_Health
Hash=00000000b9ec5b5f
Type=PS
handling=screen
$FMV
Hash=000000002b158db5
Type=PS
handling=screen
$HUD Life
Hash=00000000076435a1
Type=PS
handling=headlocked
hash_family=1
family_signature=51808225deb2b85f
texture_mode=include
texture=4c1106bc3e129423
texture=91627895056f2669
texture=d3735622b3206ab0
texture=de81ade3d6923bae
texture=e3cfb7a4cb2e46bc
$HUD Visor Types
Hash=00000000476d615f
Type=PS
handling=headlocked
hash_family=1
family_signature=8cc4ffb088e48af3
$HUD Radar
Hash=000000006d51147b
Type=PS
handling=headlocked
hash_family=1
family_signature=18c2fb058f6ea8b9
texture_mode=include
texture=378cc384e8052923
texture=9e01777affbe3954
texture=c7687d7264fc0495
$HUD Border
Hash=0000000090f766ee
Type=PS
handling=headlocked
hash_family=1
family_signature=3d5d14f35f02bdc5
texture_mode=include
texture=378cc384e8052923
texture=4659c82198269108
texture=6213dc7b4cea2067
texture=65029fc7530c2556
texture=6770fbe0cce927a9
texture=847faa3fbc72fafd
texture=ab6e64b461e598b4
texture=acfb2c156818d9b4
texture=d3735622b3206ab0
$HUD Scan
Hash=000000001386f342
Type=PS
handling=screen
hash_family=1
family_signature=ed817a3f2923b114
$HUD Scan Border
Hash=000000000f312e21
Type=PS
handling=screen
$HUD Scan Effect
Hash=0000000075945182
Type=PS
handling=skip
$HUD Scan color
Hash=000000004bb35a60
Type=PS
handling=skip
$HUD Minimap Yellow
Hash=00000000e5329dc4
Type=PS
handling=headlocked
hash_family=1
$HUD Blue Dot Radar
Hash=000000004684e694
Type=GS
handling=headlocked
texture_mode=include
texture=4659c82198269108
$Unnamed Shader
Hash=00000000b9ec5b5f
Type=PS
handling=skip
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_2_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_DARK_CENTRAL
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_2_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_2_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+46
View File
@@ -0,0 +1,46 @@
[ShaderOverride_Enable]
[ShaderOverride]
[Graphics.VR]
UnitsPerMeter = 50.00
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$Element Draw 24
format=element_only_v5
handling=screen
sig_perspective=1
sig_persp_hfov=6
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=3
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
[HideObjectCodes_Enabled]
$Black screen
[HideObjectCodes]
$Black screen
Type=128bits
Upper=0x0000000000000000
Lower=0x3F7FFFFF00000000
+296
View File
@@ -0,0 +1,296 @@
[ShaderOverride_Enable]
[ShaderOverride]
$Main Menu
Hash=0000000068cb2ebf
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=063f2a687eb68e93
texture=0c32aef0edbbd237
texture=104e2cc1d1caebc7
texture=114b9e8cf9115a86
texture=1ea3a4c99fd2e49f
texture=21cee000e4cc3ea5
texture=24fd950092fad05e
texture=38246c0ae052c615
texture=392eda3e9f8e1da3
texture=3fa594adeb9e323d
texture=44b07d2cbe0762ec
texture=4d384d847cfd2c19
texture=51a089a5a28755d9
texture=57e710dbfe3ef98e
texture=611106025e7f6727
texture=6c200101e7c48d31
texture=70ff2f5fe8b3f815
texture=77c917d62ae78035
texture=8314c912961b4491
texture=845406f7109c91f3
texture=84c46c83dcd5d10b
texture=891e8c4d17e2e17b
texture=8a8c91bd2a0659d4
texture=9468da6db0040e97
texture=94ec4ca8a34f8681
texture=9679331111cb1e77
texture=9d9c004a32d673e9
texture=a35acf80abd10385
texture=a6247abeef06226c
texture=bf45ea718f1a2aa5
texture=ca436eff990d6f24
texture=ccc53802c6e4f9ef
texture=cd6ac7b0e66bbae7
texture=d247a8f74946318f
texture=d4c7f1be643140c9
texture=dbf9d1d1dcbb57a5
texture=e224ab6cfbffd889
texture=e53c7d47f671e969
texture=e6e805cb8f26f46b
texture=efbcd448a80edd95
texture=f7af09f9f0285a52
texture=f7dca127bb53c5e9
texture=ff10223616c08787
texture=ffbd87995d0eacbc
$Main Menu 2
Hash=00000000edaeb20d
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=0991eaeb8d0fe7d6
texture=157b1d43706b5f6e
texture=1f7733a7ba57f325
texture=7ba79057b46b1989
texture=891e8c4d17e2e17b
texture=c882063f8763e3d6
texture=e4d4b0e4d93fc124
$HUD
Hash=000000004066a17e
Type=VS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=0375c6fc8642dbfc
texture=091555bc4ec6eaf4
texture=0bfc6a26f0c9dcb8
texture=16583905badc593d
texture=198b0513b9249bf0
texture=21603b6df442db5a
texture=24e5504ff3b22e0e
texture=38d272479e6a4813
texture=4bf5d081e7deace5
texture=508cfb6217c17172
texture=50bea34926ecb4b2
texture=536fc734fc6aa285
texture=5dfc4f1ae0dcc253
texture=5f4d3f73a3bca830
texture=608d2f0042a0c46c
texture=6866a7fbcf3273f1
texture=96d1ba6e8ff22ea8
texture=a02dc613df3921ff
texture=a5ff2bb17574ec16
texture=ab819905e2ea908b
texture=b1e8dea9fbfbbd4d
texture=b6e75a4e32967d5c
texture=c677f6a517adec0b
texture=c77cd9f853cad937
texture=cc8300fcc020ef69
texture=d56b5d3f030960a4
texture=d8e83a904ac21990
texture=f47f20dbcc7a3480
texture=fef48910c2651a58
texture=ff10223616c08787
$HUD Time
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=3815923aa6a00410
$Unnamed Shader 1
Hash=0000000006ece1c8
Type=PS
match_mode=exact_hash
handling=screen
[Graphics.VR]
UnitsPerMeter = 50.00
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$Element Draw 2
format=element_only_v5
handling=screen
sig_perspective=1
sig_persp_hfov=5
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=30
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$Black Screen
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=00000000ac20fd6c
selected_match_0_ps_family=182b4f6db39e05aa
selected_match_0_gs_family=000000007b617113
selected_match_0_texture=ea19780ef5c43df9
$Special Stage White Screen
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=00000000ac20fd6c
selected_match_0_ps_family=182b4f6db39e05aa
selected_match_0_gs_family=000000007b617113
selected_match_0_texture=3815923aa6a00410
$Character shadows
format=element_only_v5
handling=fullscreen
sig_perspective=1
sig_persp_hfov=4
sig_persp_vfov=4
sig_persp_near=100
sig_persp_far=25
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=406
sig_vp_y=406
sig_vp_w=62
sig_vp_h=62
sig_sc_l=344
sig_sc_t=344
sig_sc_r=467
sig_sc_b=467
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
+90
View File
@@ -0,0 +1,90 @@
[ShaderOverride_Enable]
[ShaderOverride]
$blacksquare
Hash=00000000a8d2ed4e
Type=PS
match_mode=exact_hash
handling=skip
$Startup
Hash=00000000edaeb20d
Type=PS
match_mode=exact_hash
handling=screen
$Logo
Hash=0000000068cb2ebf
Type=PS
match_mode=exact_hash
handling=screen
$FMV
Hash=0000000083897d7a
Type=PS
match_mode=exact_hash
handling=screen
$Selectbox
Hash=0000000083897d7a
Type=PS
match_mode=exact_hash
handling=screen
$HUD Team_formation
Hash=000000004066a17e
Type=VS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=091555bc4ec6eaf4
texture=198b0513b9249bf0
texture=38d272479e6a4813
texture=3eeccda25c7a61bf
texture=5dfc4f1ae0dcc253
texture=608d2f0042a0c46c
texture=96d1ba6e8ff22ea8
texture=c677f6a517adec0b
texture=cc8300fcc020ef69
texture=d8e83a904ac21990
texture=fef48910c2651a58
$Blackscreen
Hash=00000000ac20fd6c
Type=VS
match_mode=exact_hash
handling=skip
$Subs
Hash=0000000006ece1c8
Type=PS
match_mode=exact_hash
handling=skip
$Effectground
Hash=000000002febc826
Type=PS
match_mode=exact_hash
handling=skip
$Text
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=screen
$HUD team
Hash=00000000aa8e5494
Type=PS
match_mode=exact_hash
handling=screen
element_start=2
element_end=60
$HUD time score
Hash=0000000083897d7a
Type=PS
match_mode=exact_hash
handling=screen
element_start=2
element_end=10
+37
View File
@@ -0,0 +1,37 @@
[ShaderOverride_Enable]
[ShaderOverride]
$FMV
Hash=00000000bcbf5145
Type=PS
handling=screen
$Text
Hash=000000007905c727
Type=PS
handling=screen
$Character_indicator
Hash=0000000029d6fcdb
Type=PS
handling=screen
$Timer_also
Hash=00000000fb6ceffb
Type=PS
handling=screen
$Credits_hud
Hash=000000007d095f4c
Type=PS
handling=screen
$Crosshair
Hash=00000000fc0d4ed9
Type=PS
handling=screen
$Congratulation_picture
Hash=000000002b158db5
Type=PS
handling=screen
+84
View File
@@ -0,0 +1,84 @@
[Graphics.VR]
UnitsPerMeter = 1.00
[HideObjectCodes_Enabled]
$Black Bar Bottom
$Black Bar top
[HideObjectCodes]
$Black Bar Bottom
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000000000FF
$Black Bar top
Type=128bits
Upper=0x000000003F440001
Lower=0x00000000000000FF
[ElementsGroupOverride_Enable]
$Minimap Road
[ElementsGroupOverride]
$Minimap Road
format=element_only_v5
handling=skip
sig_perspective=1
sig_persp_hfov=9
sig_persp_vfov=9
sig_persp_near=1
sig_persp_far=800
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=872
sig_vp_y=722
sig_vp_w=60
sig_vp_h=60
sig_sc_l=812
sig_sc_t=662
sig_sc_r=931
sig_sc_b=781
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$FMV
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-50
sig_ortho_right=50
sig_ortho_top=38
sig_ortho_bottom=-38
sig_use_projection=1
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
+45
View File
@@ -0,0 +1,45 @@
[ShaderOverride_Enable]
[ShaderOverride]
$Unnamed Shader 1
Hash=000000001410f7c7
Type=PS
match_mode=exact_hash
handling=screen
[ElementsGroupOverride_Enable]
$HUD
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32
sig_ortho_right=32
sig_ortho_top=24
sig_ortho_bottom=-24
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00640000
sig_ztest=0
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=0
[Graphics.VR]
UnitsPerMeter = 50.00
VirtualScreen = False
+178
View File
@@ -0,0 +1,178 @@
[ShaderOverride_Enable]
[ShaderOverride]
$EFB Effects
Hash=000000003d877e91
Type=PS
match_mode=exact_hash
handling=fullscreen
$Character_Shadows
Hash=000000006c367f0c
Type=PS
match_mode=exact_hash
handling=fullscreen
$EFB Effects 2
Hash=000000005347e90a
Type=PS
match_mode=exact_hash
handling=fullscreen
$HUD
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=screen
$Main menu stars
Hash=00000000dd2e5970
Type=VS
match_mode=exact_hash
handling=screen
$Main menu background
Hash=00000000d527ab2a
Type=VS
match_mode=exact_hash
handling=screen
$Main menu up
Hash=000000008d2ef813
Type=VS
match_mode=exact_hash
handling=screen
$Main menu blue
Hash=00000000516da5d0
Type=VS
match_mode=exact_hash
handling=screen
$Main menu arrows
Hash=00000000118459ee
Type=VS
match_mode=exact_hash
handling=screen
$Blue Square
Hash=000000002b3a6cc8
Type=VS
match_mode=exact_hash
handling=screen
$EFB Desert
Hash=0000000026e1b10a
Type=PS
match_mode=exact_hash
handling=fullscreen
$EFB Desert 2
Hash=0000000082d8dfce
Type=VS
match_mode=exact_hash
handling=fullscreen
[ElementsGroupOverride_Enable]
$EFB
$Shadow
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$EFB
format=element_only_v5
handling=fullscreen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=0
sig_blend_color=1
sig_blend_alpha=0
$Shadow
format=element_only_v5
handling=fullscreen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=0
sig_blend_color=1
sig_blend_alpha=1
[Graphics.VR]
UnitsPerMeter = 500.00
VirtualScreen = True
+55
View File
@@ -0,0 +1,55 @@
[Graphics.VR]
UnitsPerMeter = 500.00
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
Hash=00000000387e78c8
Type=PS
handling=screen
$HUD2
Hash=00000000c94c4d5f
Type=PS
handling=screen
$HUD item
Hash=00000000ecdd6992
Type=PS
handling=screen
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$Element Draw 815
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60,800
sig_ortho_top=0
sig_ortho_bottom=44,800
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
+51
View File
@@ -0,0 +1,51 @@
[Graphics.VR]
UnitsPerMeter = 1.5
HudThickness = 0.5
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_1_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_XRAY_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_1_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_THERMAL_EFFECT
profile_layer=METROID_THERMAL_EFFECT_GUN
profile_layer=METROID_CHARGE_BEAM_EFFECT
profile_layer=METROID_XRAY_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_1_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+52
View File
@@ -0,0 +1,52 @@
[Graphics.VR]
UnitsPerMeter = 1.5
HudThickness = 0.5
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_1_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_XRAY_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_1_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_THERMAL_EFFECT
profile_layer=METROID_THERMAL_EFFECT_GUN
profile_layer=METROID_CHARGE_BEAM_EFFECT
profile_layer=METROID_XRAY_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_1_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+99
View File
@@ -0,0 +1,99 @@
[HideObjectCodes_Enabled]
[HideObjectCodes]
$remove orb
Type=8bits
Upper=0x0000000000000000
Lower=0x000000000000003F
$remove shadow 2
Type=8bits
Upper=0x0000000000000000
Lower=0x0000000000000000
[ElementsGroupOverride_Enable]
$Circle and Shadow
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=660
sig_vp_y=564
sig_vp_w=320
sig_vp_h=224
sig_sc_l=340
sig_sc_t=340
sig_sc_r=979
sig_sc_b=787
sig_alpha=00240000
sig_ztest=1
sig_zupdate=1
sig_zfunc=1
sig_blend_color=1
sig_blend_alpha=1
$Circle and Shadow
format=element_only_v5
handling=skip
texture_mode=exclude
texture=2f9ac52528781aae
texture=52e684c21fff85aa
texture=5a83422a94989792
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=660
sig_vp_y=564
sig_vp_w=320
sig_vp_h=224
sig_sc_l=340
sig_sc_t=340
sig_sc_r=979
sig_sc_b=787
sig_alpha=00240000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
Hash=0000000056886e42
Type=PS
match_mode=exact_hash
handling=screen
$Bonus Stage Floor
Hash=000000002baf3bf9
Type=PS
match_mode=exact_hash
handling=skip
[Graphics.VR]
UnitsPerMeter = 1.00
VirtualScreen = True
+465
View File
@@ -0,0 +1,465 @@
[Graphics.VR]
UnitsPerMeter = 500.00
[TextureElementOverride_Enable]
$Water Effect
$Heat Haze
$HUD
$HUD DEBS Alert
$Pause
$Level Select
$Bianco Water
$60fps Stars Glitch
$Behind Wall Mask
$Title Screen
$File Select
$Option Menu
$Intro
$Pianta Village Water
[TextureElementOverride]
$Water Effect
handling=skip
texture=2a424a5892944eb4
$Heat Haze
handling=skip
texture=a0ee80f74dd3b117
$HUD
handling=screen
texture=01a60a7d9b5f51c6
texture=0304896aa9adb0bf
texture=06f47ce9bd931cee
texture=0a330a53679495bf
texture=0a54fa0b5aed213f
texture=0ba0790584347690
texture=0ea77fbdffc6c900
texture=1d2547e8adb554d6
texture=1f600918722ebeca
texture=2701922b8bcb194e
texture=297479f41223c960
texture=2b9217f127a85419
texture=2f55b1232cb71f4f
texture=3c592f7ac2031d10
texture=45c7276ea8caa916
texture=47d941afe5ba76d6
texture=487a463bc0bd633c
texture=5014839063e2ef73
texture=509db83a57ea4dbf
texture=5231f8de769a7cfc
texture=577835acbee525ad
texture=6066c75478ca20d4
texture=60a4929bcf9cd85e
texture=62e4eac7f139141f
texture=6464ad542de196db
texture=6743827d94362afb
texture=6b299accc8ead586
texture=81765f96d3131cb7
texture=8381c728f194b3a0
texture=87785edd2c5550f9
texture=91ea110f64b641e9
texture=a1ad681e6c073750
texture=ab2ac66087591747
texture=ac9911596ff44f0f
texture=b048589bbf6e9ee3
texture=c9717b966554213f
texture=cc7ac949d09c6974
texture=cc7feca077d90013
texture=cfda62185dc4dd01
texture=d15419e685bdc648
texture=d7c966dd2344803f
texture=d9373485e4145137
texture=e2bbf85f32171071
texture=e6165ba3644fdb51
texture=e89c5b7615d307c1
texture=f5ea51068b0c1499
texture=f67b3c91df63d217
texture=f6abdf32379ebea3
texture=f9fe79ad514ef888
$HUD DEBS Alert
handling=screen
texture=0a87e259c524a5d8
texture=2e07a25ba44f339a
texture=31fac1826440ee46
texture=7cbd1245339e6d49
texture=e4b383fc9bacc672
$Pause
handling=screen
texture=07ad01cc9aad815b
texture=163f61548493efbb
texture=1f600918722ebeca
texture=27ee7e00861cefcc
texture=3c088294fd759555
texture=3f55bae1c2fec217
texture=45745a8a34f7c96b
texture=47d941afe5ba76d6
texture=53756de2f2c92144
texture=7ac1574dcb272c0c
texture=86e0a9cf002228b2
texture=88859e110db31a95
texture=8c76342201dcb87d
texture=973c2944edf640cc
texture=ac07ced61532d478
texture=b75b0aa81b91ef4e
texture=bf4c87f19404c73d
texture=c26a83dda44dc8b6
texture=d002bb380a37badf
texture=df435df4c810c026
texture=f16b6f03d9f2e288
$Level Select
handling=screen
texture=105257d41ba3e61e
texture=16b63e57c5e0243d
texture=17ae6a23b59bcca2
texture=3cf0229711b06588
texture=46e34569265f7c42
texture=4d3e0661ddb61b36
texture=59bc2ea535ba329e
texture=5e1c3f78243abc9e
texture=7250a07aa00e1945
texture=794a9f476d81b933
texture=8132f4fab5486027
texture=8fc7d5531e087f0e
texture=941522d8ecb92a3a
texture=a47578f9e9b2bf49
texture=d13c18fe0a5750c3
texture=d18624c1b46d499b
texture=df05609140aeab06
texture=ea1730eb5fcfb672
$Bianco Water
handling=skip
texture=2dbb67e72bf8db05
$60fps Stars Glitch
handling=skip
texture=2224ef94600e4349
$Behind Wall Mask
handling=screen
texture=5c94b2c6f1649dab
$Title Screen
handling=screen
texture=0d72d804518cea76
texture=12c49516720224e9
texture=279b4ad929624e26
texture=2be218765ba946e5
texture=2e27761d897de1df
texture=2fca46cc2b0490f7
texture=332159b50e854264
texture=3d4469f3f4244b44
texture=4ab33179eab62b19
texture=4b8ca4ade2f87739
texture=4c10e4d1b62542a5
texture=549930ecad1ce7e9
texture=61538f252127d0a3
texture=665023fb85f9f4f3
texture=6838167583403da0
texture=6e965c8d22068600
texture=72093b9f0baf0279
texture=85af4308ecb3ed0e
texture=8d3df377ee98a246
texture=97e935152f7829cd
texture=9fcb17a7c98a957c
texture=ba65636909cf153e
texture=bd65da845999d990
texture=c69cbfa116116e04
texture=ca2e8e7c99a658fa
texture=ce88bfceeea828f7
texture=d0cba9c0255db427
texture=e5c071c1099ac762
texture=edab4e6c89e0c0d9
texture=f14f900999f6b99d
texture=f4101eefd907a066
$File Select
handling=screen
texture=111712b37213dc89
texture=2bcba8ce6e1fee64
texture=6105f7f114ae84e7
texture=64cee6c1e447fbf5
texture=76b33b6f37ae8f08
texture=943d2098e5ffb086
texture=999fa683890afc1f
texture=9bee06d8439a0efe
texture=9c61a1bda7d4df9f
texture=b760aadb1bf764e0
texture=b94d3c8dca426fb1
texture=bfd444847a23c61e
texture=ce5aff1cbf2eba90
texture=db199ec86a691416
texture=de4a444d21adeed6
texture=df56f15d71e7931b
texture=e1cd20bd2d00f48e
texture=e7663bdd3c3cb815
texture=e97372586eae7429
$Option Menu
handling=screen
texture=1938181691fd5852
texture=1a782ff042c4b249
texture=37c9486b56315198
texture=37f4664824187eff
texture=3d2c9e30df1aaea7
texture=42a9b940b954a929
texture=50a451179c363bbb
texture=575fdba3a0f96cd6
texture=59e73f976091c40e
texture=654be1348658e4d1
texture=73f81d1173f84f5f
texture=881db0dbdb0fa6fb
texture=8b53dbe78fd9fa38
texture=8e4db6f51d2d8111
texture=ac03be30836f9c0a
texture=bfd444847a23c61e
texture=d050b33048b1b9d8
texture=d265f4c2fef089fd
texture=e98ce39a636fbb6d
texture=ee4d085b52d705a9
texture=fd17a9dba897c0de
$Intro
handling=screen
texture=071adce31d1747d7
texture=36ca6146c24274b5
texture=9972628edb9c9d47
texture=a3d41495fb684298
$Pianta Village Water
handling=skip
texture=71d5a751cde6f897
[ElementsGroupOverride_Enable]
$FMV
$Level Select
[ElementsGroupOverride]
$EFB
format=element_only_v5
handling=skip
texture_mode=exclude
texture=0b15cd9b3c7aadc5
texture=0deebc4f6cbf8fd7
texture=1c96069e3a43461a
texture=2a424a5892944eb4
texture=39f5a44bd06af71c
texture=7429ab5919c19776
texture=780c14f682f381a4
texture=863ba9ae1f747853
texture=a0ee80f74dd3b117
texture=a2420b3ad5c8fbbe
texture=a31a15e8e436f22f
texture=ab271635b24499b1
sig_perspective=1
sig_persp_hfov=6
sig_persp_vfov=5
sig_persp_near=10
sig_persp_far=30
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=0
sig_use_viewport=0
sig_use_scissor=0
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=1
sig_ortho_bottom=46
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=0
sig_use_viewport=0
sig_use_scissor=0
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$FMV
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=0
sig_use_viewport=0
sig_use_scissor=0
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=0
$EFB 02
format=element_only_v5
handling=skip
texture_mode=exclude
texture=1c96069e3a43461a
texture=2a424a5892944eb4
texture=7429ab5919c19776
texture=780c14f682f381a4
texture=863ba9ae1f747853
sig_perspective=1
sig_persp_hfov=6
sig_persp_vfov=5
sig_persp_near=10
sig_persp_far=30
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=0
sig_use_viewport=0
sig_use_scissor=0
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Bianco Hill Water
format=element_only_v5
handling=skip
texture_mode=exclude
texture=5bbe7c36b7331e6d
texture=7e14bcc72be82e94
texture=eaea00e24e6aacab
texture=f9baa54de002fa39
sig_perspective=1
sig_persp_hfov=6
sig_persp_vfov=5
sig_persp_near=10
sig_persp_far=30
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Level Select
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=1
sig_ortho_bottom=46
sig_use_projection=0
sig_use_projection_type=1
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=566
sig_vp_w=320
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=789
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
+37
View File
@@ -0,0 +1,37 @@
[ShaderOverride_Enable]
[ShaderOverride]
$Save hud
+Hash=000000001fa28974
+Type=PS
+handling=screen
$Savescreen text
+Hash=000000004b5ec958
+Type=PS
+handling=screen
$Unnamed Shader
+Hash=000000002b3a6cc8
+Type=VS
+handling=screen
$Unnamed Shader
+Hash=0000000031c70e24
+Type=VS
+handling=screen
$Fludd Water Tank
+Hash=000000003a9e6320
+Type=VS
+handling=screen
$EFB
+Hash=00000000c071a3a6
+Type=VS
+handling=skip
$Fludd Water Tank background
+Hash=00000000fe3d91e4
+Type=VS
+handling=screen
+38
View File
@@ -0,0 +1,38 @@
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
[ShaderOverride_Enable]
[ShaderOverride]
$HUD Small Square
Hash=00000000f1389fad
Type=PS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=be8114e36b01a3c1
$HUD Small Square 2
Hash=00000000051c200c
Type=PS
match_mode=shader_family
handling=skip
hash_family=1
family_signature=72991ea47245d747
texture_mode=include
texture=be8114e36b01a3c1
[Graphics.VR]
UnitsPerMeter = 4.00
VirtualScreen = True
[HideObjectCodes_Enabled]
$Cinematic Bar Down
$Cinematic Bar Up
[HideObjectCodes]
$Cinematic Bar Down
Type=128bits
Upper=0xFF95019000030000
Lower=0x00000000000002EB
$Cinematic Bar Up
Type=128bits
Upper=0xFF95FFD000030000
Lower=0x00000000000002EB
+72
View File
@@ -0,0 +1,72 @@
[ElementsGroupOverride_Enable]
$HUD
$Menu
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32
sig_ortho_right=32
sig_ortho_top=24
sig_ortho_bottom=-24
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00640000
sig_ztest=0
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=0
$Menu
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32
sig_ortho_right=32
sig_ortho_top=24
sig_ortho_bottom=-24
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00640000
sig_ztest=0
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
[Graphics.VR]
UnitsPerMeter = 50.00
VirtualScreen = False
+46
View File
@@ -0,0 +1,46 @@
[ShaderOverride_Enable]
[ShaderOverride]
$Motion Blur
Hash=0000000032dabdfb
Type=PS
match_mode=exact_hash
handling=skip
[ElementsGroupOverride_Enable]
$Motion Blur
[ElementsGroupOverride]
$Motion Blur
format=element_only_v5
handling=skip
comments= Looks like a drunk filter
credits=iChris4
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=660
sig_vp_y=580
sig_vp_w=320
sig_vp_h=240
sig_sc_l=340
sig_sc_t=340
sig_sc_r=979
sig_sc_b=819
sig_alpha=000eff00
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
[Graphics.VR]
UnitsPerMeter = 100.00
+367
View File
@@ -0,0 +1,367 @@
[HideObjectCodes_Enabled]
$White Square
$White Square 02
[HideObjectCodes]
$White Square
Type=128bits
Upper=0xC425E2CCC3D0C1F3
Lower=0xBF8258A2FFFFFFFF
$White Square 02
Type=128bits
Upper=0xC4273066C3CF47B3
Lower=0xBF816C75FFFFFFFF
[ShaderOverride_Enable]
[ShaderOverride]
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
[TextureElementOverride_Enable]
$HUD - Speed
$Pause Menu
$Stage Select
$HUD - Animals
$HUD - Mecha
$Mire
$HUD - TH
$HUD - TH - MS - Text
$Level Intro
$Kart
$Intro
$Main Menu
$Select a Memory Card
$Result Screen
$Metal Habour Sun Flair
$Chao Garden
[TextureElementOverride]
$HUD - Speed
handling=screen
texture=035bb73c378b80fe
texture=0b6b779cd79037a4
texture=169aed02ad1adf2d
texture=365386fa4af5c4fb
texture=397cf75b2bfd5618
texture=3f95af26eadc1e59
texture=5e95a94bee9b94cc
texture=65aa115aaa4da681
texture=6e6485f30204331d
texture=7eef4c7cb13545e5
texture=8b2ff0acc9131cc7
texture=8c2124304cd65f91
texture=9a3c20dce7af0f2b
texture=a80e09d105411ff9
texture=b08ebc8041d10279
texture=b222fad7a918e6db
texture=bc83c0b4b43fa988
texture=c886864ab3058f15
texture=ca36d548d8d3f106
texture=d359416dd1f0eef2
texture=fe58517853490af7
$Pause Menu
handling=screen
texture=300bd7b746f8eb25
texture=40eba6c22fe3ad5d
texture=5110c79813ce4f89
texture=5632f7df7f4b77bd
texture=5803b9df3332dd42
texture=668bb68e64c4414e
texture=a96f5a5f957aa53c
texture=cfee991052472833
texture=ea76c6397a187816
$Stage Select
handling=screen
texture=00e0126af96a10a6
texture=011d485fd5fb41f4
texture=0264d9232f1d541e
texture=06aec18dc4ffcde1
texture=0a73f052d1682163
texture=0bed9fe054c0ef1f
texture=0f54d080d28f8a1e
texture=0fa0bc2ae8c702e2
texture=13e1b0106b4b910b
texture=149b05035335bcf2
texture=15152f4facefa7ce
texture=1a1415ea212bed4b
texture=1e3eecbd408bc645
texture=1f5fa34a5d70509c
texture=200a1065e999d2e7
texture=211a56403ae65df0
texture=2bda8060f5af2d11
texture=2c3dad23357f879c
texture=2cedfa4023b6803e
texture=2dedc1e77dadbaf2
texture=31b88a44665460a2
texture=34835ace58aa1328
texture=36426c682e039b7e
texture=365d3efccfd04786
texture=3ee914307e0cfba2
texture=402daf0c844d2a87
texture=43a291b5d14f4747
texture=44346934ca407bbf
texture=475e9a0aca517999
texture=488818d1dc1bf568
texture=488da6bb5b191232
texture=4e7b29a719ebed7c
texture=4ffb1203bbe05f7f
texture=5022a8f801f1fbd4
texture=55ed86591cdcb542
texture=572cb04ad4769b59
texture=597f21380cbc37b2
texture=5e9182ba280b02ea
texture=60a75acea8d778df
texture=6801c44d1ec73bfa
texture=6a24b4acefc93db5
texture=72f8bca0e1726dc3
texture=7300b378aff68c45
texture=747cfbb5dc242db4
texture=7522a502b68b2cbc
texture=782bf7c46ebcbe94
texture=79a65326dcfbdef0
texture=7c15e72aed71595d
texture=80eed62e0b762381
texture=8118677d50616cbc
texture=81992e80ff01bffd
texture=81efb83a6f788810
texture=822e5f63526270aa
texture=8374cf50b50748f4
texture=83ea7eecfcf92791
texture=86767ff600b75a3b
texture=87a7977b7224b483
texture=8eba61dd4b7b5610
texture=924b626afe84e009
texture=95a06ce9d4982399
texture=97d2fb9e91eae90a
texture=9879d676e3799e90
texture=98c045ff0512bd11
texture=9bb4d5de5a92c936
texture=9d92f43715852d66
texture=9ef66dae9a701aba
texture=9f03cded2faa6d9d
texture=9fc0213cc88a6a04
texture=a57ccad7bdfc42b0
texture=a9d0e667a7e069ca
texture=aac639d692420b0e
texture=b097f58b1bc27fde
texture=b70b60dc908f5fda
texture=b8f66c2b85ef9edc
texture=ba58dac830646e41
texture=bac13237fee6c8c2
texture=bb9150646bf96b1f
texture=be82d3d99810f73b
texture=bfcff714bafe8a78
texture=c09aa43bafdafe23
texture=c187eb9c1e77da86
texture=cafe4998ebd68563
texture=d40817868363f48b
texture=d7ca6ec614c20cd0
texture=daf5d4164cef1e80
texture=dd75a565c18848f1
texture=def8914128846d2c
texture=e0401508db2fff64
texture=e26fb795ebf00af5
texture=e63b0e84d69e66e8
texture=e6c1aa0edd8c4987
texture=eaf16aadb8b37171
texture=ebbee0751de97116
texture=f3923d7da94782d8
texture=f4232b7f01ef1288
texture=f7cf814f0a9175ea
texture=fd3d703c92100687
texture=fe1cbcee0743e3bf
texture=ff29942713765b0c
$HUD - Animals
handling=skip
texture=006fb09061fbd506
texture=16e2fa825ca94bac
texture=1b86e055f25be8dc
texture=4932dff920a44ddc
texture=5773575471221c6a
texture=591736c8fda54c3e
texture=642f45914eb0fe0b
texture=6b3b5f14bf6353b9
texture=7820f977d5907262
texture=8114eb4372afa4cb
texture=845df0100a6692fc
texture=8a0d6e0407c4267b
texture=8c6e5f1fb5f8cbdb
texture=95b8c202853ddbb7
texture=b90dae2c2b1aa4fb
texture=bf1e3dec01468520
texture=bffe8253fd156fa9
texture=ca69f28d2f50e5b5
texture=cfe207c6aaefe0dd
texture=d9683c4ce660962a
$HUD - Items
handling=screen
texture=08e66a16c7ab2772
texture=501b64606b946ad7
texture=964ce6668e588a79
texture=d86d8ed979f2bcf3
$HUD - Mecha
handling=screen
texture=0495b39a426b4dc0
texture=3174b707a8c574be
texture=460af379cb33302d
texture=6c97723ab6215748
texture=963c218d6f65287a
texture=e6224a382c3eaa08
$Mire
handling=screen
texture=bbb87a4e992103d1
texture=da0e4acf79b69e02
$HUD - TH
handling=screen
texture=0c39d3bb654e9761
texture=1bf531828b899bff
texture=1d3c4fccd3d49f8b
texture=200313fe488ba657
texture=227b67932bd4b0e4
texture=267a0d171dcbf78f
texture=2bb50ab46a667833
texture=326d43d9bbfa24b7
texture=3a7ce7d13de5d152
texture=3cdc64a2ae462beb
texture=5d8ef103ab0562e0
texture=67b7b8001a445307
texture=6defa0873931aff6
texture=73d2a01da71414ec
texture=8f360e1a5d6e77a8
texture=9fd55c10ae9aa2ea
texture=befc446b90a9647d
texture=c9801d207bad1f7b
texture=eae2542012f67bc4
texture=f89af9b6af1ccda9
$HUD - TH - MS - Text
handling=screen
texture=1b9ffe3b921405ea
texture=35b36dea3eaf4206
texture=3e13610cf545fd50
texture=3f5f017c8bf1f10d
texture=46dbf58b44c6dad0
texture=4eeac2beee7d7433
texture=5805686bd542fdcf
texture=63c174714fa840f5
texture=6995281093de00d7
texture=6b80b4d07cbde717
texture=753514368e4bb1fb
texture=9444dca69ef0f612
texture=a110e4345434336b
texture=ac7f8c85cfa62d11
texture=ada862a2f32b8012
texture=da2b11f89cce82b4
texture=e1a588c6c969be0d
texture=e3ffaa173dea2f6c
$Level Intro
handling=screen
texture=0707c640cbf4c518
texture=2cb7e1cf33855f3f
texture=363ec56bcc455099
texture=3c1655d341bed3e1
texture=412f7d7052dd7eb7
texture=47da6e87b5e62b36
texture=53ad3d102d4d9047
texture=545cc06f68d712a9
texture=55a694a969589dcb
texture=5aecd459c6ece632
texture=5c7da40a7c7630d0
texture=5d0a429f0ec92674
texture=675a0a28063a7043
texture=7a5f7c8dd0b471eb
texture=8434885b980fd0b0
texture=8b75fcfa8d1ff40d
texture=978f2b3d8487bd10
texture=a94c5c7a7e7db4ab
texture=ad8c2c51fd6e69b2
texture=b31d3646aaa95af3
texture=c5b8d600fd138269
texture=c834449a772f0469
texture=cfa03b9babf58db1
texture=dd7d772a5bd31f7e
texture=e55273825ed22d38
texture=e6224a382c3eaa08
texture=e7b94fac2f45e4a8
texture=f076324250aa0388
$Kart
handling=screen
texture=053c8a3c3fadd4d7
texture=2584f2f93a3159dd
$Intro
handling=screen
texture=059ff4603b07ddf8
texture=30eba242b976ef08
texture=40978ba7f803486e
texture=c3c29ade6e29d5a4
texture=d8300b881c49fa85
texture=e7fdbaa3614bcd44
texture=ec34eff2d1aa01fa
$Main Menu
handling=screen
texture=0f35116c80fa97d5
texture=11f8e8563827c5df
texture=1e80e5550620f216
texture=2eb80f37b4e02b61
texture=44cea5eaabf42269
texture=4c21a029024a8347
texture=67f6b13c0b360ab4
texture=6ef56e47270f08ba
texture=d4134d6d0b55c09e
texture=dac3584e20ba17cb
texture=e64e1a5cdc2413de
texture=e6e5860629398a6e
texture=f2303f77938fb1ca
texture=f55930ddc2a6dec2
$Select a Memory Card
handling=screen
texture=00b6cf8ca3f40cc6
texture=2dedc1e77dadbaf2
texture=2e99146f397b65c3
texture=352e9415cc6a37d7
texture=365d3efccfd04786
texture=383144355d5e1f7b
texture=49cad8412aa5e473
texture=7df94b6beae6ff1a
texture=be8434353a39206e
texture=deaacc5a5ec4b77b
texture=dec416952603f40f
texture=e42bae89adaa2fae
texture=e790647ebd9de024
$Result Screen
handling=screen
texture=04e625c8d5585506
texture=6a6f10d55eeb6a10
texture=a1ef28664f2cb9e8
$Metal Habour Sun Flair
handling=units_per_meter
units_per_meter=0.01
texture=3df32461831e7bd6
texture=4db0aaf533a042ab
texture=67dd24c29b471df9
texture=71466731c75efcbf
texture=a69b410a516ce43d
texture=b454d8dc637305ca
texture=c3eecb915da4afa1
$Chao Garden
handling=screen
texture=15e474f5fc8fba34
texture=2d438e4e8053392d
texture=2dc26edb48217e94
texture=463693688440db13
texture=495e8aab6940f041
texture=4ba3e88f3cdbe08f
texture=a53f409e651212c1
+134
View File
@@ -0,0 +1,134 @@
[ShaderOverride_Enable]
[ShaderOverride]
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=00000000198dabb4
selected_match_0_ps_family=a89c4ca6fc8e5876
selected_match_0_gs_family=000000002b78268c
selected_match_0_texture=09d976ea25d1c1c0
selected_match_1_vs_family=00000000198dabb4
selected_match_1_ps_family=a89c4ca6fc8e5876
selected_match_1_gs_family=000000002b78268c
selected_match_1_texture=1b15674d61c05ba0
selected_match_2_vs_family=000000002b3a6cc8
selected_match_2_ps_family=0d577e9bbc49f1ab
selected_match_2_gs_family=000000007b617113
selected_match_2_texture=1b15674d61c05ba0
selected_match_3_vs_family=000000002b3a6cc8
selected_match_3_ps_family=0d577e9bbc49f1ab
selected_match_3_gs_family=000000007b617113
selected_match_3_texture=8f45dd68096d4665
selected_match_4_vs_family=00000000198dabb4
selected_match_4_ps_family=a89c4ca6fc8e5876
selected_match_4_gs_family=000000002b78268c
selected_match_4_texture=cc9e9b4f27f7130b
selected_match_5_vs_family=000000002b3a6cc8
selected_match_5_ps_family=0d577e9bbc49f1ab
selected_match_5_gs_family=000000007b617113
selected_match_5_texture=cc9e9b4f27f7130b
selected_match_6_vs_family=00000000198dabb4
selected_match_6_ps_family=a89c4ca6fc8e5876
selected_match_6_gs_family=000000002b78268c
selected_match_6_texture=419463745aa5965d
selected_match_7_vs_family=00000000198dabb4
selected_match_7_ps_family=a89c4ca6fc8e5876
selected_match_7_gs_family=000000002b78268c
selected_match_7_texture=fb31bc5c96de28fd
selected_match_8_vs_family=000000002b3a6cc8
selected_match_8_ps_family=0d577e9bbc49f1ab
selected_match_8_gs_family=000000007b617113
selected_match_8_texture=fb31bc5c96de28fd
selected_match_9_vs_family=00000000198dabb4
selected_match_9_ps_family=a89c4ca6fc8e5876
selected_match_9_gs_family=000000002b78268c
selected_match_9_texture=1b214a192871a592
selected_match_10_vs_family=000000002b3a6cc8
selected_match_10_ps_family=0d577e9bbc49f1ab
selected_match_10_gs_family=000000007b617113
selected_match_10_texture=419463745aa5965d
selected_match_11_vs_family=00000000198dabb4
selected_match_11_ps_family=a89c4ca6fc8e5876
selected_match_11_gs_family=000000002b78268c
selected_match_11_texture=924376c246b3c129
selected_match_12_vs_family=00000000198dabb4
selected_match_12_ps_family=a89c4ca6fc8e5876
selected_match_12_gs_family=000000002b78268c
selected_match_12_texture=8f45dd68096d4665
selected_match_13_vs_family=00000000198dabb4
selected_match_13_ps_family=9d787892a4e9865b
selected_match_13_gs_family=000000002b78268c
selected_match_13_texture=cc80552cae3417e6
$EFB
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
selected_match_0_vs_family=00000000198dabb4
selected_match_0_ps_family=a89c4ca6fc8e5876
selected_match_0_gs_family=000000002b78268c
selected_match_0_texture=5983dda9f15715a4
[Graphics.VR]
UnitsPerMeter = 30.00
VirtualScreen = False
+271
View File
@@ -0,0 +1,271 @@
[Graphics.VR]
UnitsPerMeter = 30.00
OpcodeReplay = 0
ForcedVBIFrequency = 120
[TextureElementOverride_Enable]
[TextureElementOverride]
$Main Menu
handling=screen
texture=143a9a3691ec2fe3
texture=1f8073e98a2364c3
texture=49a8c44f197eeeac
texture=634aefd8d516c9bf
texture=6d76110de4a56138
texture=73962f92710e9e9e
texture=8f5047e58bff1b21
texture=afa640b26de7fdf0
texture=bab511d7e23412d7
texture=be2006d9345ae529
texture=febe2674c632a66e
$Pause
handling=screen
texture=1b214a192871a592
texture=fb31bc5c96de28fd
$HUD
handling=screen
texture=09d976ea25d1c1c0
texture=419463745aa5965d
texture=8f45dd68096d4665
texture=8f5047e58bff1b21
texture=928c2332561eeb1b
texture=c200a7ab6180b62e
texture=cc9e9b4f27f7130b
texture=f044169b53dba310
$HUD2
handling=screen
texture=1b15674d61c05ba0
[ShaderOverride_Enable]
[ShaderOverride]
[ElementsGroupOverride_Enable]
$HUD
$EFB
$HUD Text
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-8000
sig_ortho_right=56000
sig_ortho_top=0
sig_ortho_bottom=48000
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$EFB
format=element_only_v5
handling=skip
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64000
sig_ortho_top=0
sig_ortho_bottom=48000
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$HUD Text
format=element_only_v5
handling=screen
sig_perspective=1
sig_persp_hfov=8268
sig_persp_vfov=5313
sig_persp_near=1000
sig_persp_far=3000000
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
[HideObjectCodes_Enabled]
[HideObjectCodes]
$EFB Fullscreen Effects
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000FFFFFFFF
$Black Square
Type=128bits
Upper=0x0000000000000000
Lower=0x000000000C0C0CFF
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000303030FF
Type=128bits
Upper=0x0000000000000000
Lower=0x3F7FFFFF00000000
$Subtitles
Type=88bits
Upper=0x0000000000000000
Lower=0x00000000003F8147
$Spring Motion Blur
Type=128bits
Upper=0xC17FFFF0C13FFFF4
Lower=0x00000000FFFFFF64
Type=128bits
Upper=0xC1200000C0F00000
Lower=0x00000000FFFFFF6E
Type=128bits
Upper=0xC1700000C1340000
Lower=0x00000000FFFFFF65
Type=128bits
Upper=0xC03FFFE0C00FFFE8
Lower=0x00000000FFFFFF7A
Type=128bits
Upper=0xC0FFFFF0C0BFFFF4
Lower=0x00000000FFFFFF72
Type=128bits
Upper=0xC0BFFFE0C08FFFE8
Lower=0x00000000FFFFFF75
Type=128bits
Upper=0xC0A00000C0700000
Lower=0x00000000FFFFFF77
Type=128bits
Upper=0xC12FFFF0C103FFF4
Lower=0x00000000FFFFFF6C
Type=128bits
Upper=0xC14FFFF8C11BFFFA
Lower=0x00000000FFFFFF69
Type=128bits
Upper=0xC0000020BFC00030
Lower=0x00000000FFFFFF7C
Type=128bits
Upper=0xC0DFFFC0C0A7FFD0
Lower=0x00000000FFFFFF73
Type=128bits
Upper=0xC15FFFE8C127FFEE
Lower=0x00000000FFFFFF67
Type=128bits
Upper=0xC1100010C0D80018
Lower=0x00000000FFFFFF70
Type=128bits
Upper=0xBF7FFF00BF3FFF40
Lower=0x00000000FFFFFF7E
Type=128bits
Upper=0xC0800020C0400030
Lower=0x00000000FFFFFF79
Type=128bits
Upper=0xC13FFFE0C10FFFE8
Lower=0x00000000FFFFFF6B
$Overlay
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000FFFFBEFF
$Red Overlay When Firing Canon
Type=120bits
Upper=0x0080000000800000
Lower=0x0000000000FFFFFF
$Red Overlay 2
Type=128bits
Upper=0xBF999940BF6665E0
Lower=0x00000000FFFFFF81
$Chaos Control EFB
Type=128bits
Upper=0xC17FFFF0C13FFFF4
Lower=0x00000000FFFFFF80
$Left Grey Backround
Type=48bits
Upper=0x0000000000000000
Lower=0x0000424000004228
$Effects
Type=128bits
Upper=0x0000000000000000
Lower=0x3F7FFFFF00000000
Type=128bits
Upper=0x0000000000000000
Lower=0x000000000C0C0CFF
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000FFFFFFFF
Type=128bits
Upper=0x3F00000000000000
Lower=0x00000000FFFFFFFF
Type=128bits
Upper=0x000000003F000000
Lower=0x00000000FFFFFFFF
Type=128bits
Upper=0x0000000000000000
Lower=0x00000000303030FF
Type=128bits
Upper=0x3FC0000000000000
Lower=0x00000000FFFFFFFF
Type=128bits
Upper=0x000000003FC00000
Lower=0x00000000FFFFFFFF
+144
View File
@@ -0,0 +1,144 @@
[ElementsGroupOverride_Enable]
$fmv
$Minimap
$EFB Motion Blur
[ElementsGroupOverride]
$fmv
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64000
sig_ortho_top=0
sig_ortho_bottom=48000
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Minimap
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64000
sig_ortho_top=0
sig_ortho_bottom=48000
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$EFB Motion Blur
format=element_only_v5
handling=skip
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64000
sig_ortho_top=0
sig_ortho_bottom=48000
sig_use_projection=1
sig_use_projection_type=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
[TextureElementOverride_Enable]
$Warning Screen
$Texture Override 2
$Texture Override
$Map
$Hilight effect locker
$Annoying Circle of dots
[TextureElementOverride]
$Warning Screen
handling=screen
texture=654ebd6875a8963b
texture=c21158de2312c991
$Texture Override 2
handling=screen
texture=8755670da0334bf9
$Texture Override
handling=screen
texture=3d7bec0c17271267
texture=472f09edac31b620
texture=62d42ba32fc47c0c
texture=deee39b18006b496
$Map
handling=screen
texture=13708b609f1294d5
texture=28b9f90d5150572b
texture=35f9d709f72ae949
$Hilight effect locker
handling=screen
texture=df723848c5663568
$Annoying Circle of dots
handling=skip
texture=af146b1164b509e4
+82
View File
@@ -0,0 +1,82 @@
[Graphics.VR]
UnitsPerMeter = 5.00
[ShaderOverride_Enable]
[ShaderOverride]
$Gameplay HUD
Hash=000000005637b01c
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=0983bfe6700594c5
texture=1e5f84c21bf37faa
texture=308e7f177a885df4
texture=31f5ea35d1356d5c
texture=341341e836a7a99d
texture=342c728c828b61b9
texture=5c566093ce99f141
texture=6d6e94f436b9cb71
texture=8f0127e7c3ab61dc
texture=aea52e4de9864891
texture=b39c48eb8da91d38
texture=c42eb24599f65b9c
texture=c5fb5447c441f08b
texture=cc87d09cd650a286
texture=cce65f7376ca91d0
texture=d1f6229e094d0f14
texture=d6bd9abb5c7737af
texture=e5b9ec91b3478273
$HUD Cave
Hash=00000000cd48bf1c
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=1e5f84c21bf37faa
texture=727a2265f28df396
$Save Prompt
Hash=00000000d32908a1
Type=PS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=c5fb5447c441f08b
[ElementsGroupOverride_Enable]
$HUD
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
credits=iChris4
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-42
sig_ortho_right=42
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=598
sig_vp_y=566
sig_vp_w=256
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=853
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
+7
View File
@@ -0,0 +1,7 @@
[ShaderOverride_Enable]
[ShaderOverride]
$FMV
+Hash=00000000884db77c
+Type=VS
+handling=screen
+108
View File
@@ -0,0 +1,108 @@
[Graphics.VR]
UnitsPerMeter = 25.00
[ElementsGroupOverride_Enable]
$HUD
$Water fix
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
credits=iChris4
sig_perspective=1
sig_persp_hfov=8
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=1
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003c0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$Intro fmv
format=element_only_v5
handling=screen
comments=On character select go over the characters 3D models
credits=iChris4
sig_perspective=1
sig_persp_hfov=8
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=300
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003c0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=1
sig_blend_color=1
sig_blend_alpha=1
$Water fix
format=element_only_v5
handling=skip
sig_perspective=1
sig_persp_hfov=8
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=1
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=004400c0
sig_ztest=1
sig_zupdate=0
sig_zfunc=1
sig_blend_color=1
sig_blend_alpha=1
+57
View File
@@ -0,0 +1,57 @@
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
+Hash=00000000f8293e92
+Type=PS
+handling=screen
+texture=132324180bf8cad6
+texture=2a0d328cfd094992
$Menu 1
+Hash=00000000299301b7
+Type=PS
+handling=screen
+texture=0406bb54a29b5554
+texture=10085c02593ad084
+texture=170483b9e13ca5ed
+texture=22eca14f1c383f6a
+texture=2f8ac244b6ada3f7
+texture=4ddbae84febca1cd
+texture=549fadeb773fc748
+texture=585837ce16d8abc6
+texture=84ef0ddcb9f4d033
+texture=8ef9802115e76654
+texture=dbceee7b7280c62b
+texture=de6042ccf50e3041
$Menu 2
+Hash=000000005d0e31c3
+Type=PS
+handling=screen
+texture=10085c02593ad084
+texture=170483b9e13ca5ed
+texture=2f8ac244b6ada3f7
+texture=84ef0ddcb9f4d033
+texture=9f64e67215e966f8
+texture=dbceee7b7280c62b
$Menu FMV
+Hash=0000000007c171b5
+Type=PS
+handling=screen
$HUD 2
+Hash=00000000f8293e92
+Type=PS
+handling=screen
+texture=15cefd8013a17803
+texture=1ce1ef1fff724353
+texture=2a0d328cfd094992
+texture=2b99856774414c6a
+texture=46f9f97b69e89d02
+texture=776c3b5ebc095c8d
+texture=82fc44f524a72542
+texture=8aeb141d511d073e
+texture=b0ae86fb282cc69a
+texture=fda92a39e2b401bf
+258
View File
@@ -0,0 +1,258 @@
[Graphics.VR]
UnitsPerMeter = 20.00
VirtualScreen = False
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap
format=element_only_v5
handling=skip
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Map
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=60
sig_ortho_top=0
sig_ortho_bottom=44
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=420
sig_sc_t=397
sig_sc_r=876
sig_sc_b=737
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Fire
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=16
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
selected_match_0_vs_family=0000000034e70a67
selected_match_0_ps_family=2015c255e2cdd174
selected_match_0_gs_family=000000008b4a89b2
selected_match_0_texture=26caee7ab948fd57
selected_match_0_texture=88745501dca5b270
selected_match_0_texture=aaace0b19cdd7c75
selected_match_0_texture=cd14e78173cefee6
$Water
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=16
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
selected_match_0_vs_family=00000000c14a044a
selected_match_0_ps_family=a74bad1a3a315b90
selected_match_0_gs_family=00000000db53de2d
selected_match_0_texture=aaace0b19cdd7c75
selected_match_0_texture=eee6eee62a32be15
selected_match_0_texture=f5843fa4febedfc0
$Water Village
format=element_only_v5
handling=skip
selected_match_mode=include
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=16
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
selected_match_0_vs_family=000000004376b019
selected_match_0_ps_family=7ac6df022a989cf1
selected_match_0_gs_family=00000000db53de2d
selected_match_0_texture=763e6c635b650555
selected_match_0_texture=aaace0b19cdd7c75
selected_match_0_texture=fa5f18b3d0bc3f19
$Water Effect behind link
format=element_only_v5
handling=skip
sig_perspective=1
sig_persp_hfov=7
sig_persp_vfov=6
sig_persp_near=1
sig_persp_far=16
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=566
sig_vp_w=304
sig_vp_h=224
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=789
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
+233
View File
@@ -0,0 +1,233 @@
[Graphics.VR]
UnitsPerMeter = 200.00
[ElementsGroupOverride_Enable]
$Save Select
$HUD
$Minimap 01
$Minimap Arrow
$Minimap bac
$Minimap
[ElementsGroupOverride]
$Save Select
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=820
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=820
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap 01
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=820
sig_alpha=003c0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap Arrow
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=384
sig_sc_t=670
sig_sc_r=499
sig_sc_b=778
sig_alpha=00640000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap bac
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=820
sig_alpha=007f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-900
sig_ortho_right=65
sig_ortho_top=-2
sig_ortho_bottom=50
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=820
sig_alpha=003c0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
[ShaderOverride_Enable]
[ShaderOverride]
$EFB01
Hash=000000007b36df8b
Type=VS
match_mode=exact_hash
handling=skip
$EFB02
Hash=000000005bf8cd62
Type=VS
match_mode=exact_hash
handling=skip
$EFB03
Hash=0000000074f6b7f4
Type=VS
match_mode=exact_hash
handling=skip
$Unnamed Shader 1
Hash=000000008d0242c8
Type=PS
match_mode=exact_hash
handling=skip
+4
View File
@@ -0,0 +1,4 @@
[ShaderOverride_Enable]
[ShaderOverride]
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
+43
View File
@@ -0,0 +1,43 @@
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_2_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_DARK_CENTRAL
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_2_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_2_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+43
View File
@@ -0,0 +1,43 @@
[ElementsGroupOverride_Enable]
$Metroid Profile HUD and Visor
$Metroid Profile Screen Effects
$Metroid Profile Hidden Layers
[ElementsGroupOverride]
$Metroid Profile HUD and Visor
format=element_profile_v1
handling=headlocked
profile=metroid_prime_2_gc
profile_layer=METROID_HUD
profile_layer=METROID_UNKNOWN_HUD
profile_layer=METROID_DARK_VISOR_HUD
profile_layer=METROID_VISOR
profile_layer=METROID_HELMET
profile_layer=METROID_DARK_CENTRAL
profile_layer=METROID_VISOR_RADAR_HINT
profile_layer=METROID_RADAR_DOT
profile_layer=METROID_SCAN_RETICLE
profile_layer=METROID_SCAN_TEXT
profile_layer=METROID_SCAN_HOLOGRAM
profile_layer=METROID_VISOR_BOOTUP
profile_layer=METROID_MAP_OR_HINT
profile_layer=METROID_MAP
$Metroid Profile Screen Effects
format=element_profile_v1
handling=fullscreen
profile=metroid_prime_2_gc
profile_layer=METROID_SCREEN_FADE
profile_layer=METROID_SCREEN_OVERLAY
profile_layer=METROID_ECHO_EFFECT
profile_layer=METROID_DARK_EFFECT
profile_layer=METROID_VISOR_DIRT
profile_layer=METROID_SCAN_DARKEN
profile_layer=METROID_SCAN_HIGHLIGHTER
$Metroid Profile Hidden Layers
format=element_profile_v1
handling=skip
profile=metroid_prime_2_gc
profile_layer=METROID_EFB_COPY
profile_layer=METROID_BLACK_BARS
profile_layer=METROID_SCAN_BOX
+248
View File
@@ -0,0 +1,248 @@
[Graphics.VR]
UnitsPerMeter = 2.0
[ShaderOverride_Enable]
[ShaderOverride]
$EFB 01
Hash=0000000097d12539
Type=VS
handling=skip
hash_family=1
family_signature=0000000097d12539
$Planete Atmosphere
Hash=00000000c5c08aa5
Type=PS
handling=units_per_meter
units_per_meter=0.01
$Space
Hash=000000008d9f07a3
Type=PS
handling=units_per_meter
units_per_meter=0.01
texture_mode=include
texture=528f41b25f15a001
texture=5f3b19e4d4c471dc
$Planete
Hash=00000000ec1bd8b6
Type=PS
handling=units_per_meter
units_per_meter=0.01
$Morph Ball Transition EFB 1
Hash=00000000c5f8cf72
Type=PS
handling=skip
$Unnamed Shader 1
Hash=0000000047e2e4c8
Type=PS
handling=skip
$Unnamed Shader 2
Hash=00000000bf3ff898
Type=PS
handling=skip
$Unnamed Shader 3
Hash=0000000013f4fcd2
Type=PS
handling=skip
$HUD Visor Icon
Hash=0000000031edab72
Type=PS
handling=headlocked
texture_mode=include
texture=47382578f2df4238
texture=c325dd2e81b76450
$HUD Bars
Hash=00000000486f9c44
Type=PS
handling=headlocked
texture_mode=include
texture=3eb8381879cf96e1
texture=de81ade3d6923bae
texture=e2afa23ca21dcd09
$HUD Borders Lights
Hash=000000005467ff27
Type=PS
handling=headlocked
texture_mode=include
texture=3eb8381879cf96e1
texture=4659c82198269108
$HUD Visor Indicator
Hash=000000006bcd9515
Type=PS
handling=screen
texture_mode=include
texture=3eb8381879cf96e1
texture=847479ca4ca13986
texture=e2afa23ca21dcd09
$HUD 01
Hash=000000009cd2d360
Type=PS
handling=headlocked
texture_mode=include
texture=3eb8381879cf96e1
texture=49679a7ccbbbdefb
texture=509723fa4ca15c07
texture=7cd48b7c7d1eabe1
texture=a63ebdc372c2c2b0
texture=b6101c40f90e35b8
texture=b9b77bed5f7fe2d2
texture=c0a6e20f68761b39
texture=cd73483a21a0393e
texture=e1bfa9d78b45f982
texture=e23d5bfa878b3822
texture=e378bac5ef1d4edc
texture=e433bfd213466a50
texture=e4907f1ef76b811b
texture=ecd7866aed633019
texture=f394c71d898aa628
texture=f6415ff79092ca08
texture=f6f85f3048de0489
$HUD Text
Hash=00000000a238512d
Type=PS
handling=headlocked
texture_mode=include
texture=5d731b783a1f75a4
texture=8a7b20be8ca8cf79
texture=91627895056f2669
$HUD 02
Hash=00000000e677acc3
Type=PS
handling=headlocked
texture_mode=include
texture=847479ca4ca13986
texture=a63ebdc372c2c2b0
texture=e433bfd213466a50
$HUD Minimap
Hash=000000002866acba
Type=PS
handling=headlocked
texture_mode=include
texture=3eb8381879cf96e1
texture=847479ca4ca13986
texture=e2afa23ca21dcd09
$Unnamed Shader 4
Hash=000000006f06112e
Type=PS
handling=skip
$Hotkey PS 15c126c4
Hash=0000000015c126c4
Type=PS
handling=skip
$Hotkey PS 132e8e6f
Hash=00000000132e8e6f
Type=PS
handling=skip
$Hotkey PS 7ff45305
Hash=000000007ff45305
Type=PS
handling=skip
$Scanner Overlay
Hash=000000000d8e89c2
Type=PS
handling=screen
$HUD Energy Text
Hash=0000000011d43845
Type=VS
handling=headlocked
texture_mode=include
texture=5d731b783a1f75a4
texture=91627895056f2669
texture=e3cfb7a4cb2e46bc
$HUD Small Lights
Hash=00000000e270bbdb
Type=VS
handling=headlocked
texture_mode=include
texture=f6f85f3048de0489
$Radar Dots
Hash=000000001cb03fd3
Type=PS
handling=headlocked
$Morph Ball EFB
Hash=00000000f69bd91e
Type=VS
handling=skip
$EFB EFFECT
Hash=0000000095979b60
Type=VS
handling=skip
$Hotkey VS 37889dfc
Hash=0000000037889dfc
Type=VS
handling=skip
condition=Scanner
condition_mode=activate
texture_mode=exclude
texture=40a6c697a216cd45
texture=43758082fb69453b
texture=4659c82198269108
texture=4f212cf0e3017ed8
texture=509723fa4ca15c07
texture=659d52e07839443d
texture=74737b6e425b2753
texture=7cd48b7c7d1eabe1
texture=84357180359b5c91
texture=96279794b79efbbd
texture=a63ebdc372c2c2b0
texture=aa08c274288a4fd6
texture=b04ce8b0a5109788
texture=b2f411682a7de4a5
texture=b6101c40f90e35b8
texture=b9fc67cccfab4dcf
texture=ba98829618fb8753
texture=be036a6bd3610c09
texture=c0a6e20f68761b39
texture=cd73483a21a0393e
texture=e1bfa9d78b45f982
texture=e23d5bfa878b3822
texture=e378bac5ef1d4edc
texture=e4907f1ef76b811b
texture=e86108662ce1e1d0
texture=e8f3888a8db51c51
texture=ecd7866aed633019
texture=f394c71d898aa628
texture=f6f85f3048de0489
texture=fa99db57356c36da
$Scanner
Hash=00000000e1202485
Type=VS
handling=screen
flag=Scanner
$Hotkey VS e270bbdb
Hash=00000000e270bbdb
Type=VS
handling=screen
condition=Scanner
condition_mode=activate
texture_mode=exclude
texture=91627895056f2669
texture=96279794b79efbbd
texture=a63ebdc372c2c2b0
+72
View File
@@ -0,0 +1,72 @@
[ElementsGroupOverride_Enable]
$Gameplay HUD
$Menu
[ElementsGroupOverride]
$Gameplay HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32
sig_ortho_right=32
sig_ortho_top=24
sig_ortho_bottom=-24
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00470000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Menu
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32
sig_ortho_right=32
sig_ortho_top=24
sig_ortho_bottom=-24
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
[Graphics.VR]
UnitsPerMeter = 15.00
VirtualScreen = False
+327
View File
@@ -0,0 +1,327 @@
[Graphics.VR]
UnitsPerMeter = 1.5
[ShaderOverride_Enable]
[ShaderOverride]
$Scan Effects
Hash=00000000a834da79
Type=VS
handling=skip
flag=Scan
$Scan EFB Effect
Hash=00000000a134cc51
Type=VS
handling=skip
condition=Scan
condition_mode=activate
$Space and Starts
Hash=000000009440f71a
Type=PS
handling=units_per_meter
units_per_meter=0.01
texture_mode=include
texture=28f68ec4760a8f33
texture=2af3eac112df6ad9
texture=4c8d5e5105a1ce62
texture=53402773209dd054
texture=5978a9fd0fa420ea
texture=8070f69d4aa12fa5
texture=83d06a7f46004d63
texture=a4d08582b031ed5d
$Planete Clouds
Hash=00000000de8254f4
Type=PS
handling=units_per_meter
units_per_meter=0.01
texture_mode=include
texture=1232a662782399dd
texture=b2787e156fb34699
texture=b74dd65817a93afd
texture=c27a9425d08998c6
$Planete in the intro
Hash=00000000d9bb9293
Type=PS
handling=units_per_meter
units_per_meter=0.01
texture_mode=include
texture=0f3192a333bd60bf
texture=28f68ec4760a8f33
texture=63cf3537e0682ce5
texture=86ab78afc99d10dc
texture=c821af3115336fb4
$Planete in the intro Atmosphere
Hash=00000000980dc843
Type=PS
handling=units_per_meter
units_per_meter=0.01
texture_mode=include
texture=7498fdac756ee362
texture=c821af3115336fb4
$Samus Arm in the ship
Hash=000000007d4a4a7d
Type=PS
handling=units_per_meter
units_per_meter=2.5
$Samus Arm in the ship Green Button
Hash=000000001dba12b0
Type=PS
handling=units_per_meter
units_per_meter=2.5
$Space Gas
Hash=00000000cd4c1319
Type=PS
handling=units_per_meter
units_per_meter=0.1
$Textbox
Hash=0000000053bb9636
Type=PS
handling=screen
$Textbox Shadow
Hash=000000007b346bb1
Type=PS
handling=screen
$HUD Life Bar Metter
Hash=00000000467b2d0a
Type=VS
handling=headlocked
texture_mode=include
texture=380a4ed102753a91
texture=4c1106bc3e129423
texture=877ac67dc3c23f97
texture=8a3e8ec9d97c84f7
texture=91627895056f2669
texture=96342171475066ab
texture=b0c321687c7a410b
texture=b7bcef92f3f7378d
texture=d3576576ea854c06
texture=e0490df227638ca4
texture=e3cfb7a4cb2e46bc
$HUD Minimap Yellow
Hash=00000000e4c0f308
Type=VS
handling=headlocked
$HUD Side Glowing Pattern
Hash=00000000e3693792
Type=VS
handling=skip
condition=Ship Map
condition_mode=deactivate
$HUD Top and Bottom Patterns
Hash=00000000876869e8
Type=VS
handling=skip
texture_mode=include
texture=05cc1aa330c76706
texture=2c35e0978af15ab9
texture=302a1ef6254d41ed
texture=45bfea2d6d4095bc
texture=78f06525df8be9a9
texture=79a461275782740f
texture=7b1e147db495548a
texture=8867d8afd385931b
texture=96024ca94ed7a952
texture=9e49a1d847a78cad
texture=cabb2ea6008423e8
texture=e23d5bfa878b3822
texture=f5b543c6ce3d2892
$HUD Blue Bars
Hash=00000000b5dfae94
Type=VS
handling=headlocked
texture_mode=include
texture=ca4340be4ff1d0c1
$HUD Radar & Minimap
Hash=00000000d9e56ba1
Type=PS
handling=headlocked
hash_family=1
family_signature=9bfa9614d1e63c4e
$HUD Minimap Shadow Background
Hash=000000006a5d85fb
Type=PS
handling=headlocked
hash_family=1
family_signature=17436f16bab03b71
$HUD Minimap Yellow Background
Hash=00000000075dba1e
Type=PS
handling=headlocked
hash_family=1
family_signature=3d5d14f35f02bdc5
$HUD Minimap Window Cut
Hash=00000000f5db6afb
Type=PS
handling=headlocked
condition=Ship Map
condition_mode=deactivate
hash_family=1
family_signature=51329b04b4650d91
$Radar Shadow Background
Hash=00000000738497fb
Type=PS
handling=skip
hash_family=1
family_signature=17437a16bab04e22
$HUD Minimap 2
Hash=000000008ababdcd
Type=PS
handling=headlocked
condition=Ship Map
condition_mode=deactivate
hash_family=1
family_signature=703d1f1b1c8687fd
$HUD Minimap Shadow Background 2
Hash=0000000009abbe00
Type=PS
handling=skip
hash_family=1
family_signature=17436e16bab039be
$Ship Map & Arrow
Hash=00000000c8fbe7f6
Type=PS
handling=screen
condition=Ship Map
condition_mode=activate
hash_family=1
family_signature=c13ee4d4a421f2bb
$Ship Map EFB
Hash=00000000a36dcb25
Type=PS
handling=skip
condition=Ship Map
condition_mode=activate
hash_family=1
family_signature=1680a2a7798383fc
$Ship Map Planete Norion
Hash=00000000127b6c87
Type=PS
handling=screen
condition=Ship Map
condition_mode=activate
hash_family=1
family_signature=5ce3569f191a73c9
$Ship Map
Hash=00000000127b6c87
Type=PS
handling=flag
flag=Ship Map
texture_mode=include
texture=1ae3f91996bf8504
texture=6dde3b3a6b083159
texture=78fd4a6b3dce1042
$Ship Map Selector
Hash=00000000f5db6afb
Type=PS
handling=screen
condition=Ship Map
condition_mode=activate
$Exit Ship Box
Hash=000000004e4fb751
Type=PS
handling=screen
$Exit Ship Text
Hash=0000000090cee951
Type=PS
handling=screen
$Exit Ship B Button
Hash=000000000fa714b3
Type=PS
handling=screen
$HUD Selector
Hash=000000004058a00e
Type=PS
handling=headlocked
hash_family=1
family_signature=f97a5e54037b9825
$HUD Selector Icons
Hash=00000000f973d429
Type=PS
handling=headlocked
hash_family=1
family_signature=0b49f78c7fc55d69
texture_mode=include
texture=2c639f847f1c286c
$Radar Samus Face
Hash=00000000f973d429
Type=PS
handling=skip
condition=Scan
condition_mode=activate
$Scan side pannels
Hash=000000004e114e63
Type=PS
handling=headlocked
condition=Scan
condition_mode=activate
$Blue Bars Hyper Mode
Hash=000000004058a00e
Type=PS
handling=headlocked
$Floating pixel
Hash=00000000516da5d0
Type=VS
handling=skip
hash_family=1
family_signature=00000000516da5d0
$Stray Pixel
Hash=00000000bba2a905
Type=PS
handling=skip
hash_family=1
family_signature=54636216817a60d3
$Radar Target point
Hash=00000000ec9eb741
Type=PS
handling=headlocked
hash_family=1
family_signature=7afdb23d054cb864
$Morph Ball HUD
Hash=000000004058a00e
Type=PS
handling=headlocked
$A Button Prompt
Hash=000000006142402e
Type=PS
handling=headlocked
hash_family=1
family_signature=9cb98db2e2ef5edd
+238
View File
@@ -0,0 +1,238 @@
[Graphics.VR]
UnitsPerMeter = 500.0
[ShaderOverride_Enable]
[ShaderOverride]
$EFB1
Hash=0000000052657776
Type=PS
match_mode=exact_hash
handling=skip
$Minimap head
Hash=0000000069562615
Type=PS
match_mode=exact_hash
handling=skip
$Text
Hash=000000000e9b236e
Type=VS
match_mode=exact_hash
handling=screen
element_depth=0.0053
$Menu_Overlay
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=screen
element_depth=0.0053
$Bloom
Hash=00000000467b2d0a
Type=VS
match_mode=exact_hash
handling=skip
$Mainmenu_background
Hash=00000000d6773474
Type=VS
match_mode=exact_hash
handling=screen
element_depth=0.0053
$Minimap_Charactershadow
Hash=0000000069ac796e
Type=PS
match_mode=exact_hash
handling=skip
$MainMenuVideos
Hash=00000000ca38d1aa
Type=VS
match_mode=exact_hash
handling=screen
element_depth=0.0053
$EFB_Effect_01
Hash=0000000078d6ff61
Type=PS
match_mode=exact_hash
handling=skip
$EFB Award Ceremony
Hash=00000000fdb363d3
Type=PS
match_mode=exact_hash
handling=skip
$Award Ceremony Stars
Hash=00000000379bf799
Type=PS
match_mode=exact_hash
handling=screen
$Singleplayer_menu_Video01
Hash=000000005bf8cd62
Type=VS
match_mode=exact_hash
handling=screen
$Singleplayer_menu_video_02
Hash=000000004cee45b8
Type=VS
match_mode=exact_hash
handling=screen
$EFB_Volcano
Hash=00000000c61a4585
Type=PS
match_mode=exact_hash
handling=fullscreen
$Singleplayer_menu_background
Hash=0000000047b728bc
Type=VS
match_mode=exact_hash
handling=screen
$Singleplayer_menu_box
Hash=00000000884db77c
Type=VS
match_mode=exact_hash
handling=screen
$Singleplayer_menu_backgrounditem
Hash=000000004cb9fdaf
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Ceremony
condition_mode=deactivate
$Singleplayer_menu_character
Hash=000000007b8703c8
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplayer_menu_Character_eyes
Hash=00000000d26351da
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplayer_menu_vehicle
Hash=000000007657d5d8
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplayer_menu_Vehicle_tires
Hash=00000000cc5cc217
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplzyer_menu_vehicle_rim
Hash=000000000459f3cb
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplayer_menu_stats_background
Hash=00000000bafa7000
Type=VS
match_mode=exact_hash
handling=screen
texture_mode=include
texture=7099096ed516b037
texture=7b787f8aa697a4a8
texture=988b8ac81b73d404
texture=e66eea69392fd459
$Staff_Credit_Cinematicbars
Hash=00000000677241d9
Type=PS
match_mode=exact_hash
handling=skip
$Staffcredits_videos
Hash=00000000e42504b8
Type=PS
match_mode=exact_hash
handling=screen
$WII_Health_Screen
Hash=0000000061b8f1d2
Type=PS
match_mode=exact_hash
handling=screen
$Blooper_ink_1
Hash=00000000638579c8
Type=PS
match_mode=exact_hash
handling=screen
$Blooper_ink_2
Hash=0000000089574d7d
Type=PS
match_mode=exact_hash
handling=screen
$B_Buton
Hash=0000000015b56d5a
Type=PS
match_mode=exact_hash
handling=flag
flag=Menu
$Other Vehicles
Hash=00000000c8f3f355
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Windows
Hash=00000000c59a92b2
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Flag
Hash=00000000ff41122d
Type=VS
match_mode=exact_hash
handling=fullscreen
condition=Menu
condition_mode=activate
$Singleplayer_menu_text
Hash=000000009f5b3fa6
Type=VS
match_mode=exact_hash
handling=screen
$Mario Circuit Flag
Hash=000000003b23b906
Type=PS
match_mode=exact_hash
handling=flag
flag=Ceremony
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
+453
View File
@@ -0,0 +1,453 @@
[Graphics.VR]
UnitsPerMeter = 500.00
[ShaderOverride_Enable]
[ShaderOverride]
$B button
Hash=0000000015b56d5a
Type=PS
match_mode=exact_hash
handling=flag
flag=B button
$Mario
Hash=00000000a89a8548
Type=PS
match_mode=exact_hash
handling=fullscreen
condition=B button
condition_mode=activate
[ElementsGroupOverride_Enable]
$Element Draw 247
$Element Draw 318
$Element Draw 222
[ElementsGroupOverride]
$Element Draw 247
format=element_only_v5
handling=screen
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41
sig_ortho_right=41
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
selected_match_0_vs_family=00000000d6773474
selected_match_0_ps_family=499e4e6e862e3d26
selected_match_0_gs_family=000000002b78268c
selected_match_0_texture=15a5e3555cc498c8
selected_match_0_texture=2c8def0fa1d520c1
selected_match_0_texture=5ee6f674373b07c0
selected_match_0_texture=94ca513d49ca99b6
selected_match_0_texture=fcd86df44aef565a
selected_match_1_vs_family=00000000d6773474
selected_match_1_ps_family=499e4e6e862e3d26
selected_match_1_gs_family=000000002b78268c
selected_match_1_texture=15a5e3555cc498c8
selected_match_1_texture=2c8def0fa1d520c1
selected_match_1_texture=8a71f6deb6d29d67
selected_match_1_texture=94ca513d49ca99b6
selected_match_1_texture=fcd86df44aef565a
selected_match_2_vs_family=00000000d6773474
selected_match_2_ps_family=499e4e6e862e3d26
selected_match_2_gs_family=000000002b78268c
selected_match_2_texture=15a5e3555cc498c8
selected_match_2_texture=2c8def0fa1d520c1
selected_match_2_texture=94ca513d49ca99b6
selected_match_2_texture=c6d910a177907b96
selected_match_2_texture=fcd86df44aef565a
selected_match_3_vs_family=00000000d6773474
selected_match_3_ps_family=499e4e6e862e3d26
selected_match_3_gs_family=000000002b78268c
selected_match_3_texture=15a5e3555cc498c8
selected_match_3_texture=2c8def0fa1d520c1
selected_match_3_texture=48434e6acf90eef3
selected_match_3_texture=94ca513d49ca99b6
selected_match_3_texture=fcd86df44aef565a
selected_match_4_vs_family=00000000198dabb4
selected_match_4_ps_family=d4c6ec4ad5083096
selected_match_4_gs_family=000000002b78268c
selected_match_4_texture=15a5e3555cc498c8
selected_match_4_texture=2c8def0fa1d520c1
selected_match_4_texture=66e33770ec38e0bd
selected_match_4_texture=94ca513d49ca99b6
selected_match_4_texture=fcd86df44aef565a
selected_match_5_vs_family=00000000d6773474
selected_match_5_ps_family=499e4e6e862e3d26
selected_match_5_gs_family=000000002b78268c
selected_match_5_texture=15a5e3555cc498c8
selected_match_5_texture=2c8def0fa1d520c1
selected_match_5_texture=66e33770ec38e0bd
selected_match_5_texture=94ca513d49ca99b6
selected_match_5_texture=fcd86df44aef565a
selected_match_6_vs_family=00000000d6773474
selected_match_6_ps_family=499e4e6e862e3d26
selected_match_6_gs_family=000000002b78268c
selected_match_6_texture=15a5e3555cc498c8
selected_match_6_texture=2c8def0fa1d520c1
selected_match_6_texture=94ca513d49ca99b6
selected_match_6_texture=a3183535cbc3220b
selected_match_6_texture=fcd86df44aef565a
selected_match_7_vs_family=00000000198dabb4
selected_match_7_ps_family=d4c6ec4ad5083096
selected_match_7_gs_family=000000002b78268c
selected_match_7_texture=15a5e3555cc498c8
selected_match_7_texture=2c8def0fa1d520c1
selected_match_7_texture=5f416dfdb8e22d87
selected_match_7_texture=94ca513d49ca99b6
selected_match_7_texture=fcd86df44aef565a
selected_match_8_vs_family=00000000198dabb4
selected_match_8_ps_family=d81b8055949e3d26
selected_match_8_gs_family=000000002b78268c
selected_match_8_texture=0fe10de60caa58d7
selected_match_8_texture=15a5e3555cc498c8
selected_match_8_texture=2c8def0fa1d520c1
selected_match_8_texture=94ca513d49ca99b6
selected_match_8_texture=fcd86df44aef565a
selected_match_9_vs_family=00000000198dabb4
selected_match_9_ps_family=211682a1f1583096
selected_match_9_gs_family=000000002b78268c
selected_match_9_texture=15a5e3555cc498c8
selected_match_9_texture=2c8def0fa1d520c1
selected_match_9_texture=7da94237f13044c2
selected_match_9_texture=94ca513d49ca99b6
selected_match_9_texture=fcd86df44aef565a
selected_match_10_vs_family=00000000198dabb4
selected_match_10_ps_family=211682a1f1583096
selected_match_10_gs_family=000000002b78268c
selected_match_10_texture=02b5073505a48fb4
selected_match_10_texture=15a5e3555cc498c8
selected_match_10_texture=2c8def0fa1d520c1
selected_match_10_texture=94ca513d49ca99b6
selected_match_10_texture=fcd86df44aef565a
selected_match_11_vs_family=00000000198dabb4
selected_match_11_ps_family=211682a1f1583096
selected_match_11_gs_family=000000002b78268c
selected_match_11_texture=15a5e3555cc498c8
selected_match_11_texture=2c8def0fa1d520c1
selected_match_11_texture=94ca513d49ca99b6
selected_match_11_texture=dff52cd335cd470e
selected_match_11_texture=fcd86df44aef565a
selected_match_12_vs_family=00000000d6773474
selected_match_12_ps_family=499e4e6e862e3d26
selected_match_12_gs_family=000000002b78268c
selected_match_12_texture=134ccfd5209e4976
selected_match_12_texture=15a5e3555cc498c8
selected_match_12_texture=2c8def0fa1d520c1
selected_match_12_texture=94ca513d49ca99b6
selected_match_12_texture=fcd86df44aef565a
selected_match_13_vs_family=00000000198dabb4
selected_match_13_ps_family=211682a1f1583096
selected_match_13_gs_family=000000002b78268c
selected_match_13_texture=134ccfd5209e4976
selected_match_13_texture=15a5e3555cc498c8
selected_match_13_texture=2c8def0fa1d520c1
selected_match_13_texture=94ca513d49ca99b6
selected_match_13_texture=fcd86df44aef565a
selected_match_14_vs_family=00000000198dabb4
selected_match_14_ps_family=2fa9ade3457f8096
selected_match_14_gs_family=000000002b78268c
selected_match_14_texture=15a5e3555cc498c8
selected_match_14_texture=2c8def0fa1d520c1
selected_match_14_texture=94ca513d49ca99b6
selected_match_14_texture=e158719cb9466098
selected_match_14_texture=fcd86df44aef565a
selected_match_15_vs_family=00000000198dabb4
selected_match_15_ps_family=2fa9ade3457f8096
selected_match_15_gs_family=000000002b78268c
selected_match_15_texture=15a5e3555cc498c8
selected_match_15_texture=2c8def0fa1d520c1
selected_match_15_texture=70968cfd1a58944b
selected_match_15_texture=94ca513d49ca99b6
selected_match_15_texture=fcd86df44aef565a
selected_match_16_vs_family=00000000198dabb4
selected_match_16_ps_family=2fa9ade3457f8096
selected_match_16_gs_family=000000002b78268c
selected_match_16_texture=15a5e3555cc498c8
selected_match_16_texture=2c8def0fa1d520c1
selected_match_16_texture=94ca513d49ca99b6
selected_match_16_texture=a3a333f684819f9d
selected_match_16_texture=fcd86df44aef565a
selected_match_17_vs_family=00000000198dabb4
selected_match_17_ps_family=2fa9ade3457f8096
selected_match_17_gs_family=000000002b78268c
selected_match_17_texture=15a5e3555cc498c8
selected_match_17_texture=2c8def0fa1d520c1
selected_match_17_texture=94ca513d49ca99b6
selected_match_17_texture=cf56fc9761fae133
selected_match_17_texture=fcd86df44aef565a
selected_match_18_vs_family=00000000198dabb4
selected_match_18_ps_family=2fa9ade3457f8096
selected_match_18_gs_family=000000002b78268c
selected_match_18_texture=15a5e3555cc498c8
selected_match_18_texture=2c8def0fa1d520c1
selected_match_18_texture=94ca513d49ca99b6
selected_match_18_texture=c21c2850e1d5daea
selected_match_18_texture=fcd86df44aef565a
selected_match_19_vs_family=00000000198dabb4
selected_match_19_ps_family=2fa9ade3457f8096
selected_match_19_gs_family=000000002b78268c
selected_match_19_texture=15a5e3555cc498c8
selected_match_19_texture=1cf3043c976277dd
selected_match_19_texture=2c8def0fa1d520c1
selected_match_19_texture=94ca513d49ca99b6
selected_match_19_texture=fcd86df44aef565a
selected_match_20_vs_family=00000000198dabb4
selected_match_20_ps_family=2fa9ade3457f8096
selected_match_20_gs_family=000000002b78268c
selected_match_20_texture=15a5e3555cc498c8
selected_match_20_texture=2c8def0fa1d520c1
selected_match_20_texture=94ca513d49ca99b6
selected_match_20_texture=fafff5bb996ef243
selected_match_20_texture=fcd86df44aef565a
selected_match_21_vs_family=00000000198dabb4
selected_match_21_ps_family=2fa9ade3457f8096
selected_match_21_gs_family=000000002b78268c
selected_match_21_texture=15a5e3555cc498c8
selected_match_21_texture=2c8def0fa1d520c1
selected_match_21_texture=869aa03a4d18553d
selected_match_21_texture=94ca513d49ca99b6
selected_match_21_texture=fcd86df44aef565a
selected_match_22_vs_family=00000000198dabb4
selected_match_22_ps_family=2fa9ade3457f8096
selected_match_22_gs_family=000000002b78268c
selected_match_22_texture=15a5e3555cc498c8
selected_match_22_texture=2c8def0fa1d520c1
selected_match_22_texture=94ca513d49ca99b6
selected_match_22_texture=9bce4f3cc4789bc4
selected_match_22_texture=fcd86df44aef565a
selected_match_23_vs_family=00000000d6773474
selected_match_23_ps_family=499e4e6e862e3d26
selected_match_23_gs_family=000000002b78268c
selected_match_23_texture=15a5e3555cc498c8
selected_match_23_texture=1cf3043c976277dd
selected_match_23_texture=2c8def0fa1d520c1
selected_match_23_texture=94ca513d49ca99b6
selected_match_23_texture=fcd86df44aef565a
selected_match_24_vs_family=00000000198dabb4
selected_match_24_ps_family=2fa9ade3457f8096
selected_match_24_gs_family=000000002b78268c
selected_match_24_texture=15a5e3555cc498c8
selected_match_24_texture=2c8def0fa1d520c1
selected_match_24_texture=475444cb679d829f
selected_match_24_texture=94ca513d49ca99b6
selected_match_24_texture=fcd86df44aef565a
selected_match_25_vs_family=00000000198dabb4
selected_match_25_ps_family=2fa9ade3457f8096
selected_match_25_gs_family=000000002b78268c
selected_match_25_texture=15a5e3555cc498c8
selected_match_25_texture=2c8def0fa1d520c1
selected_match_25_texture=94ca513d49ca99b6
selected_match_25_texture=efbb2b06ca868251
selected_match_25_texture=fcd86df44aef565a
selected_match_26_vs_family=00000000198dabb4
selected_match_26_ps_family=d81b8055949e3d26
selected_match_26_gs_family=000000002b78268c
selected_match_26_texture=15a5e3555cc498c8
selected_match_26_texture=2c8def0fa1d520c1
selected_match_26_texture=6f0e62faf112638d
selected_match_26_texture=94ca513d49ca99b6
selected_match_26_texture=fcd86df44aef565a
selected_match_27_vs_family=00000000198dabb4
selected_match_27_ps_family=d81b8055949e3d26
selected_match_27_gs_family=000000002b78268c
selected_match_27_texture=15a5e3555cc498c8
selected_match_27_texture=2c8def0fa1d520c1
selected_match_27_texture=94ca513d49ca99b6
selected_match_27_texture=e96b5e9b96c89795
selected_match_27_texture=fcd86df44aef565a
selected_match_28_vs_family=00000000d6773474
selected_match_28_ps_family=499e4e6e862e3d26
selected_match_28_gs_family=000000002b78268c
selected_match_28_texture=15a5e3555cc498c8
selected_match_28_texture=2c8def0fa1d520c1
selected_match_28_texture=94ca513d49ca99b6
selected_match_28_texture=a33f2eb619f43731
selected_match_28_texture=fcd86df44aef565a
selected_match_29_vs_family=00000000198dabb4
selected_match_29_ps_family=d4c6ec4ad5083096
selected_match_29_gs_family=000000002b78268c
selected_match_29_texture=15a5e3555cc498c8
selected_match_29_texture=2c8def0fa1d520c1
selected_match_29_texture=589603106bc82d77
selected_match_29_texture=94ca513d49ca99b6
selected_match_29_texture=fcd86df44aef565a
selected_match_30_vs_family=00000000198dabb4
selected_match_30_ps_family=d4c6ec4ad5083096
selected_match_30_gs_family=000000002b78268c
selected_match_30_texture=15a5e3555cc498c8
selected_match_30_texture=2c8def0fa1d520c1
selected_match_30_texture=94ca513d49ca99b6
selected_match_30_texture=d313c6b202434a2f
selected_match_30_texture=fcd86df44aef565a
selected_match_31_vs_family=00000000198dabb4
selected_match_31_ps_family=211682a1f1583096
selected_match_31_gs_family=000000002b78268c
selected_match_31_texture=15a5e3555cc498c8
selected_match_31_texture=2c8def0fa1d520c1
selected_match_31_texture=94ca513d49ca99b6
selected_match_31_texture=d313c6b202434a2f
selected_match_31_texture=fcd86df44aef565a
selected_match_32_vs_family=000000000e9b236e
selected_match_32_ps_family=8d058747fe8ee0e6
selected_match_32_gs_family=000000002b78268c
selected_match_32_texture=15a5e3555cc498c8
selected_match_32_texture=2c8def0fa1d520c1
selected_match_32_texture=94ca513d49ca99b6
selected_match_32_texture=d41347172512a7df
selected_match_32_texture=fcd86df44aef565a
$Menu
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Menu 2
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003c0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Element Draw 318
format=element_only_v5
handling=skip
sig_perspective=1
sig_persp_hfov=8
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=50
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Element Draw 222
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41,600
sig_ortho_right=41,600
sig_ortho_top=22,800
sig_ortho_bottom=-22,800
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003e008c
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
+29
View File
@@ -0,0 +1,29 @@
[Graphics.VR]
UnitsPerMeter = 500.0
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
Hash=00000000198dabb4
Type=VS
handling=screen
$HUD Rank
Hash=00000000d6773474
Type=VS
handling=screen
$HUD Letters
Hash=000000000e9b236e
Type=VS
handling=screen
$EFB Effect
Hash=0000000078d6ff61
Type=PS
handling=fullscreen
$Award Ceremony EFB Effect
Hash=00000000fdb363d3
Type=PS
handling=fullscreen
+2
View File
@@ -0,0 +1,2 @@
[Graphics.VR]
UnitsPerMeter = 500.0
+274
View File
@@ -0,0 +1,274 @@
[Graphics.VR]
UnitsPerMeter = 500.00
[ElementsGroupOverride_Enable]
$Race HUD
$Minimap Racer
$Minimap Racer 1P
$EFB Volcano
$Main Menu
$Main Menu 2
[ElementsGroupOverride]
$EFB
format=element_only_v5
handling=skip
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=83
sig_ortho_top=0
sig_ortho_bottom=45
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=007f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$EFB2
format=element_only_v5
handling=skip
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=83
sig_ortho_top=0
sig_ortho_bottom=45
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=814
sig_vp_y=720
sig_vp_w=136
sig_vp_h=78
sig_sc_l=678
sig_sc_t=642
sig_sc_r=949
sig_sc_b=797
sig_alpha=007f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=1
$Race HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41
sig_ortho_right=41
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap Racer
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41
sig_ortho_right=41
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003e008c
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Minimap Racer 1P
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41
sig_ortho_right=41
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003c0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$EFB Volcano
format=element_only_v5
handling=fullscreen
sig_perspective=1
sig_persp_hfov=8
sig_persp_vfov=5
sig_persp_near=1
sig_persp_far=50
sig_ortho_left=0
sig_ortho_right=0
sig_ortho_top=0
sig_ortho_bottom=0
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=007f0000
sig_ztest=1
sig_zupdate=0
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Main Menu
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
$Main Menu 2
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=1
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=646
sig_vp_y=570
sig_vp_w=304
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=949
sig_sc_b=797
sig_alpha=003c0000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
+198
View File
@@ -0,0 +1,198 @@
[Graphics.VR]
UnitsPerMeter = 500.0
[ElementsGroupOverride_Enable]
$HUD
$Pointer trail
$Select Level Screen
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=570
sig_vp_w=320
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=0
sig_blend_color=1
sig_blend_alpha=0
$Pointer trail
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=83
sig_ortho_top=0
sig_ortho_bottom=45
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=570
sig_vp_w=320
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=797
sig_alpha=004bffff
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=0
$Select Level Screen
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-30
sig_ortho_right=30
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=570
sig_vp_w=320
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=0
sig_blend_color=1
sig_blend_alpha=1
[HideObjectCodes_Enabled]
$CInematic bar up
$Cinematic Bar Down
[HideObjectCodes]
$CInematic bar up
Type=128bits
Upper=0xC398000000000000
Lower=0x0000000000000000
$Cinematic Bar Down
Type=128bits
Upper=0xC3980000C2700000
Lower=0x0000000000000000
[ShaderOverride_Enable]
[ShaderOverride]
$HUD_Numbers
Hash=000000005233425f
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=exclude
texture=d92187b4040c8492
$HUD_Icones
Hash=00000000a30177c8
Type=PS
match_mode=exact_hash
handling=screen
$HUD_Shadows
Hash=000000003c371f64
Type=PS
match_mode=exact_hash
handling=screen
$Text_box Arrow
Hash=00000000757115fb
Type=PS
match_mode=exact_hash
handling=screen
$Wii pointer trail
Hash=000000007c9a1b09
Type=PS
match_mode=exact_hash
handling=screen
$Cinematic_Bars 01
Hash=00000000a30177c8
Type=PS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=ff10223616c08787
$Select_buttons
Hash=000000004e1d3326
Type=PS
match_mode=exact_hash
handling=screen
$Hand Pointer
Hash=00000000f9f27a88
Type=PS
match_mode=exact_hash
handling=screen
$Hand pointer shadow
Hash=000000009551be3c
Type=PS
match_mode=exact_hash
handling=screen
$Galaxy Map trails
Hash=000000005233425f
Type=PS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=60eff5497ae01c93
$Waterfall
Hash=0000000086d1bafc
Type=PS
match_mode=exact_hash
handling=skip
$Bowl Galaxy Water
Hash=0000000052b3c704
Type=PS
match_mode=exact_hash
handling=skip
+2
View File
@@ -0,0 +1,2 @@
[Graphics.VR]
UnitsPerMeter = 1.00
+80
View File
@@ -0,0 +1,80 @@
[ShaderOverride_Enable]
[ShaderOverride]
[ElementsGroupOverride_Enable]
$Element Draw 311
$Element Draw 294
[ElementsGroupOverride]
$Element Draw 311
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41
sig_ortho_right=41
sig_ortho_top=22
sig_ortho_bottom=-22
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=570
sig_vp_w=320
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=797
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=0
sig_blend_color=1
sig_blend_alpha=0
$Element Draw 294
format=element_only_v5
handling=screen
selected_match_mode=include
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-41,600
sig_ortho_right=41,600
sig_ortho_top=22,800
sig_ortho_bottom=-22,800
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=570
sig_vp_w=320
sig_vp_h=228
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=797
sig_alpha=007f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=7
sig_blend_color=1
sig_blend_alpha=0
selected_match_0_vs_family=000000000f5726d8
selected_match_0_ps_family=8250a4be7021d784
selected_match_0_gs_family=000000002b78268c
selected_match_0_texture=16d9038bbf23ea0e
selected_match_0_texture=500a69b64330ee85
selected_match_0_texture=ac869b6f32d8bbdb
selected_match_0_texture=ea19780ef5c43df9
+36
View File
@@ -0,0 +1,36 @@
[ElementsGroupOverride_Enable]
[ElementsGroupOverride]
$Element Draw 297
format=element_only_v5
handling=screen
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=-32,000
sig_ortho_right=32,000
sig_ortho_top=24,000
sig_ortho_bottom=-24,000
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=00470000
sig_ztest=1
sig_zupdate=1
sig_zfunc=3
sig_blend_color=1
sig_blend_alpha=1
[Graphics.VR]
UnitsPerMeter = 2.50
+2
View File
@@ -0,0 +1,2 @@
[Graphics.VR]
UnitsPerMeter = 10.00
+72
View File
@@ -0,0 +1,72 @@
[Graphics.VR]
UnitsPerMeter = 25.00
[ElementsGroupOverride_Enable]
$HUD
[ElementsGroupOverride]
$HUD
format=element_only_v5
handling=screen
comments=Still missing some elements
credits=iChris4
sig_perspective=0
sig_persp_hfov=0
sig_persp_vfov=0
sig_persp_near=0
sig_persp_far=0
sig_ortho_left=0
sig_ortho_right=64
sig_ortho_top=0
sig_ortho_bottom=48
sig_use_projection=0
sig_use_layer=0
sig_use_viewport=1
sig_use_scissor=1
sig_use_render_state=1
sig_layer=0
sig_vp_x=662
sig_vp_y=582
sig_vp_w=320
sig_vp_h=240
sig_sc_l=342
sig_sc_t=342
sig_sc_r=981
sig_sc_b=821
sig_alpha=003f0000
sig_ztest=0
sig_zupdate=0
sig_zfunc=1
sig_blend_color=1
sig_blend_alpha=1
[ShaderOverride_Enable]
[ShaderOverride]
$Bloom Effect
Hash=000000005233425f
Type=PS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=a6c477a4cdc8b783
$HUD
Hash=000000005233425f
Type=PS
match_mode=exact_hash
handling=screen
texture_mode=exclude
texture=a6c477a4cdc8b783
$HUD3
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=screen
$Boost
Hash=00000000198dabb4
Type=VS
match_mode=exact_hash
handling=skip
texture_mode=include
texture=a6c477a4cdc8b783
texture=c55d55f335211444
+125
View File
@@ -0,0 +1,125 @@
[ShaderOverride_Enable]
[ShaderOverride]
$HUD
+Hash=000000005233425f
+Type=PS
+handling=screen
$Resultscreen_background
+Hash=0000000077062dd7
+Type=PS
+handling=screen
+condition=Results
+condition_mode=activate
$Resultscreen_score
+Hash=0000000092add789
+Type=PS
+handling=screen
+flag=Results
$Pause_bluebox
+Hash=000000002b3a6cc8
+Type=VS
+handling=screen
$Pause_Menu
+Hash=00000000198dabb4
+Type=VS
+handling=screen
$White_halo
+Hash=000000002b3a6cc8
+Type=VS
+handling=skip
$FMV
+Hash=000000001841ae02
+Type=VS
+handling=screen
$Pause box
+Hash=000000005233425f
+Type=PS
+handling=screen
$blue rectangle
+Hash=00000000fc0d4ed9
+Type=PS
+handling=screen
$Boost effect
+Hash=0000000061655543
+Type=PS
+handling=skip
$Result screen blue borders
+Hash=00000000198dabb4
+Type=VS
+handling=screen
+texture=2f46428464d9b024
+texture=3f20ca5980cff9e3
+texture=ab58dac3f886921a
+texture=b10a89cf16970a98
+texture=e67a00cc333036e3
+texture=fee9fca210c12bda
$Result Screen Background
+Hash=00000000884db77c
+Type=VS
+handling=screen
+texture=0258c5f5aaea4fc8
+texture=132060cc44998d6d
+texture=27c0ec8d823e445f
+texture=53dbc76d11e180e8
+texture=8173eec837797a60
+texture=8c13f2460117fee9
+texture=8ff675c313a563cd
+texture=9e88d58abce6b034
+texture=b10a89cf16970a98
+texture=d039787b7ce9473e
+texture=e67a00cc333036e3
+texture=ef490d28e2b2c3c0
$Result Screen white line
+Hash=00000000bafa7000
+Type=VS
+handling=screen
+texture=b10a89cf16970a98
$Level Select HUD
+Hash=00000000198dabb4
+Type=VS
+handling=screen
+texture=f31057edf55ee8df
+texture=fce6470cd1002ec6
+texture=fea6706c809c691d
$Pause Menu
+Hash=00000000198dabb4
+Type=VS
+handling=screen
+texture=834aafcbc2034af6
+texture=87771dfe25b6544f
+texture=f628d339e215bc27
$Pause blue square
+Hash=00000000fc0d4ed9
+Type=PS
+handling=screen
+texture=02ef408571974c45
$Gameplay HUD
+Hash=000000005233425f
+Type=PS
+handling=screen
+texture=1022513c70e3feec
+texture=16ee2c01d05591b1
+texture=3fe87d6a51509943
+texture=4a2691d68948f849
+texture=530048026e5dbcb7
+texture=849d1bf2beb6e85e
+texture=84b8d4241cadc54c
+texture=8c13f2460117fee9
+texture=df081a927def3f90
@@ -0,0 +1,23 @@
[Profile]
Device = OpenXR/0/OpenXR Controller
Buttons/A = `Right Button A`
Buttons/B = `Right Button B`
Buttons/X = `Left Button X`
Buttons/Y = `Left Button Y`
Buttons/Z = `Right Button Thumbstick`
Buttons/Start = `Left Button Menu`
Main Stick/Up = `Left Thumbstick Y+`
Main Stick/Down = `Left Thumbstick Y-`
Main Stick/Left = `Left Thumbstick X-`
Main Stick/Right = `Left Thumbstick X+`
Main Stick/Calibration = 100.00
C-Stick/Up = `Right Thumbstick Y+`
C-Stick/Down = `Right Thumbstick Y-`
C-Stick/Left = `Right Thumbstick X-`
C-Stick/Right = `Right Thumbstick X+`
C-Stick/Calibration = 100.00
Triggers/L = `Left Trigger`
Triggers/R = `Right Trigger`
Triggers/L-Analog = `Left Trigger`
Triggers/R-Analog = `Right Trigger`
Rumble/Motor = `Motor`
@@ -0,0 +1,21 @@
[Profile]
Device = OpenXR/0/OpenXR Controller
Buttons/A = `Right Button A`
Buttons/B = `Right Trigger`
Buttons/1 = `Right Thumbstick Y+`
Buttons/2 = `Right Thumbstick Y-`
Buttons/- = `Right Thumbstick X-`
Buttons/+ = `Right Thumbstick X+`
Buttons/Home = `Left Button Menu`
IR/Total Yaw = 30.
IR/Pointer Sensitivity = 25.
IR/Recenter = `Right Button Thumbstick`
IMUIR/Enabled = False
Extension = Nunchuk
Nunchuk/Buttons/C = `Left Button Squeeze`&`Left Squeeze`
Nunchuk/Buttons/Z = `Left Trigger`
Nunchuk/Stick/Up = `Left Thumbstick Y+`
Nunchuk/Stick/Down = `Left Thumbstick Y-`
Nunchuk/Stick/Left = `Left Thumbstick X-`
Nunchuk/Stick/Right = `Left Thumbstick X+`
Rumble/Motor = Motor
@@ -0,0 +1,14 @@
[Profile]
Device = OpenXR/0/OpenXR Controller
Buttons/A = `Right Button A`
Buttons/B = `Right Trigger`
Buttons/1 = `Left Button X`
Buttons/2 = `Right Button B`
Buttons/- = `Left Button Y`
Buttons/+ = `Left Button Squeeze`
Buttons/Home = `Left Button Menu`
D-Pad/Up = `Left Thumbstick Y+`
D-Pad/Down = `Left Thumbstick Y-`
D-Pad/Left = `Left Thumbstick X-`
D-Pad/Right = `Left Thumbstick X+`
Rumble/Motor = `Motor`
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Vendored Submodule
+1
Submodule Externals/OpenXR added at 472d817ffe.
+2
View File
@@ -3,6 +3,8 @@ set(MZ_BUILD_TESTS OFF)
set(MZ_BUILD_UNIT_TESTS OFF)
set(MZ_BUILD_FUZZ_TESTS OFF)
set(MZ_CODE_COVERAGE OFF)
set(MZ_FETCH_LIBS OFF CACHE BOOL "Disable minizip-ng vendored dependency fetch/build." FORCE)
set(MZ_FORCE_FETCH_LIBS OFF CACHE BOOL "Disable minizip-ng forced vendored dependency fetch/build." FORCE)
set(SKIP_INSTALL_ALL ON)
add_subdirectory(minizip-ng)
+33
View File
@@ -6,6 +6,9 @@ Dolphin is an emulator for running GameCube and Wii games on Windows,
Linux, macOS, and recent Android devices. It's licensed under the terms
of the GNU General Public License, version 2 or later (GPLv2+).
This fork adds OpenXR support to Dolphin so users can play in VR on supported
Windows builds and was developed with the use of AI tools.
Please read the [FAQ](https://dolphin-emu.org/docs/faq/) before using Dolphin.
## System Requirements
@@ -49,6 +52,36 @@ Make sure to pull submodules before building:
git submodule update --init --recursive
```
### Building the OpenXR VR version
To build the VR-enabled version of this fork, OpenXR support must be enabled.
On desktop Linux, OpenXR VR is Vulkan-only and requires a working system OpenXR
runtime such as Monado or SteamVR.
If you are generating a Visual Studio build with CMake, configure with
`-DENABLE_VR=ON`:
```sh
cmake -S . -B Build-vs2022 -G "Visual Studio 17 2022" -A x64 -DENABLE_VR=ON
```
On desktop Linux, configure with OpenXR and Vulkan enabled:
```sh
cmake -S . -B Build -DENABLE_VR=ON -DENABLE_VULKAN=ON
```
When using the Visual Studio generator, build the OpenXR loader first:
```sh
cmake --build Build-vs2022 --config Release --target openxr_loader
```
Finally, build Dolphin:
```sh
cmake --build Build-vs2022 --config Release --target dolphin-emu
```
If you prefer building OpenXR separately first, the repository also includes
`Externals/OpenXR/build-win64/OPENXR.sln`.
The "Release" solution configuration includes performance optimizations for the best user experience but complicates debugging Dolphin.
The "Debug" solution configuration is significantly slower, more verbose and less permissive but makes debugging Dolphin easier.
+51 -1
View File
@@ -17,6 +17,8 @@ android {
buildConfig = true
}
flavorDimensions += "device"
compileOptions {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
@@ -92,6 +94,55 @@ android {
versionNameSuffix = "-debug"
isJniDebuggable = true
}
// Diagnostic release variants. These keep the release application ID so they can be
// tested against the same Quest package data/runtime profile as the real release build.
// They require the same release signing properties as questRelease.
create("releaseNoMinify") {
initWith(getByName("release"))
matchingFallbacks += listOf("release")
signingConfig = signingConfigs.getByName("debug")
isMinifyEnabled = false
isShrinkResources = false
}
create("releaseDebuggable") {
initWith(getByName("releaseNoMinify"))
matchingFallbacks += listOf("release")
isDebuggable = true
isJniDebuggable = true
}
}
productFlavors {
create("standard") {
dimension = "device"
buildConfigField("boolean", "IS_QUEST", "false")
ndk {
abiFilters += listOf("arm64-v8a", "x86_64")
}
externalNativeBuild {
cmake {
arguments += "-DENABLE_VR=OFF"
}
}
}
create("quest") {
dimension = "device"
applicationIdSuffix = ".quest"
versionNameSuffix = "-quest"
buildConfigField("boolean", "IS_QUEST", "true")
manifestPlaceholders["questSupportedDevices"] = "quest2|quest3|quest3s|questpro"
ndk {
abiFilters += listOf("arm64-v8a")
}
externalNativeBuild {
cmake {
arguments += "-DENABLE_VR=ON"
}
}
}
}
externalNativeBuild {
@@ -111,7 +162,6 @@ android {
"-DCMAKE_BUILD_TYPE=RelWithDebInfo"
// , "-DENABLE_GENERIC=ON"
)
abiFilters("arm64-v8a", "x86_64") //, "armeabi-v7a", "x86"
// Uncomment the line below if you don't want to build the C++ unit tests
//targets("main", "hook_impl", "main_hook", "gsl_alloc_hook", "file_redirect_hook")
@@ -5,6 +5,7 @@
package org.dolphinemu.dolphinemu
import android.content.Intent
import android.content.res.Resources
import android.view.Surface
import android.widget.Toast
@@ -13,6 +14,7 @@ import androidx.core.content.ContextCompat
import androidx.core.util.Pair
import org.dolphinemu.dolphinemu.activities.EmulationActivity
import org.dolphinemu.dolphinemu.dialogs.AlertMessage
import org.dolphinemu.dolphinemu.ui.main.MainActivity
import org.dolphinemu.dolphinemu.utils.CompressCallback
import org.dolphinemu.dolphinemu.utils.Log
import java.lang.ref.WeakReference
@@ -366,6 +368,9 @@ object NativeLibrary {
@JvmStatic
external fun StopEmulation()
@JvmStatic
external fun RequestOpenXRRecenter()
/**
* Ensures that IsRunning will return true from now on until emulation exits.
* (If this is not called, IsRunning will start returning true at some point
@@ -551,7 +556,18 @@ object NativeLibrary {
Log.warning("[NativeLibrary] EmulationActivity is null.")
} else {
Log.verbose("[NativeLibrary] Finishing EmulationActivity.")
emulationActivity.runOnUiThread(emulationActivity::finish)
emulationActivity.runOnUiThread {
// Quest VR launches start EmulationActivity in a new task and finish MainActivity
// (see EmulationActivity.startEmulationActivity), so the back stack is empty.
// Re-launch MainActivity in that case so the user lands on the game list instead
// of the app exiting.
if (emulationActivity.isTaskRoot) {
val intent = Intent(emulationActivity, MainActivity::class.java)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
emulationActivity.startActivity(intent)
}
emulationActivity.finish()
}
}
}
@@ -44,6 +44,7 @@ import org.dolphinemu.dolphinemu.features.input.model.ControllerInterface
import org.dolphinemu.dolphinemu.features.input.model.DolphinSensorEventListener
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting
import org.dolphinemu.dolphinemu.features.settings.model.QuestVrSettings
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import org.dolphinemu.dolphinemu.features.settings.model.StringSetting
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag
@@ -81,6 +82,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
private var riivolution = false
private var launchSystemMenu = false
private var menuToastShown = false
private var stopRequestedForFinish = false
private var skylanderData = Skylander(-1, -1, "Slot")
private var infinityFigureData = Figure(-1, "Position")
@@ -317,6 +319,10 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
override fun onStop() {
super.onStop()
settings.saveSettings()
if (isFinishing) {
stopEmulationForActivityFinish()
}
}
fun onTitleChanged() {
@@ -339,10 +345,27 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
}
override fun onDestroy() {
if (!isChangingConfigurations) {
stopEmulationForActivityFinish()
}
super.onDestroy()
settings.close()
}
private fun stopEmulationForActivityFinish() {
if (stopRequestedForFinish) {
return
}
stopRequestedForFinish = true
stopIgnoringLaunchRequests()
if (NativeLibrary.IsRunning()) {
emulationFragment?.stopEmulation()
}
}
override fun onBackPressed() {
if (!closeSubmenu()) {
toggleMenu()
@@ -435,6 +458,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
val wii = NativeLibrary.IsEmulatingWii()
val id = if (wii) R.menu.menu_overlay_controls_wii else R.menu.menu_overlay_controls_gc
popup.menuInflater.inflate(id, menu)
menu.findItem(R.id.menu_emulation_recenter_vr)?.isVisible = QuestVrSettings.isQuestBuild()
// Populate the switch value for joystick center on touch
menu.findItem(R.id.menu_emulation_joystick_rel_center).isChecked =
@@ -517,6 +541,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
MENU_ACTION_SETTINGS -> SettingsActivity.launch(this, MenuTag.SETTINGS)
MENU_ACTION_SKYLANDERS -> showSkylanderPortalSettings()
MENU_ACTION_INFINITY_BASE -> showInfinityBaseSettings()
MENU_ACTION_RECENTER_OPENXR -> NativeLibrary.RequestOpenXRRecenter()
MENU_ACTION_EXIT -> emulationFragment!!.stopEmulation()
}
}
@@ -1077,6 +1102,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
const val MENU_ACTION_SKYLANDERS = 36
const val MENU_ACTION_INFINITY_BASE = 37
const val MENU_ACTION_LATCHING_CONTROLS = 38
const val MENU_ACTION_RECENTER_OPENXR = 39
init {
buttonsActionsMap.apply {
@@ -1087,6 +1113,7 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
append(R.id.menu_emulation_choose_controller, MENU_ACTION_CHOOSE_CONTROLLER)
append(R.id.menu_emulation_joystick_rel_center, MENU_ACTION_JOYSTICK_REL_CENTER)
append(R.id.menu_emulation_reset_overlay, MENU_ACTION_RESET_OVERLAY)
append(R.id.menu_emulation_recenter_vr, MENU_ACTION_RECENTER_OPENXR)
append(R.id.menu_emulation_ir_recenter, MENU_SET_IR_RECENTER)
append(R.id.menu_emulation_set_ir_mode, MENU_SET_IR_MODE)
append(R.id.menu_emulation_choose_doubletap, MENU_ACTION_CHOOSE_DOUBLETAP)
@@ -1111,10 +1138,11 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
riivolution: Boolean
) {
ignoreLaunchRequests = true
prepareQuestLaunchSettings(false)
val launcher = Intent(activity, EmulationActivity::class.java)
launcher.putExtra(EXTRA_SELECTED_GAMES, filePaths)
launcher.putExtra(EXTRA_RIIVOLUTION, riivolution)
activity.startActivity(launcher)
startEmulationActivity(activity, launcher)
}
private fun performLaunchChecks(activity: FragmentActivity, fromIntent: Boolean, continueCallback: Runnable) {
@@ -1165,9 +1193,21 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
private fun launchSystemMenuWithoutChecks(activity: FragmentActivity) {
ignoreLaunchRequests = true
prepareQuestLaunchSettings(true)
val launcher = Intent(activity, EmulationActivity::class.java)
launcher.putExtra(EXTRA_SYSTEM_MENU, true)
activity.startActivity(launcher)
startEmulationActivity(activity, launcher)
}
private fun startEmulationActivity(activity: FragmentActivity, launcher: Intent) {
if (QuestVrSettings.isLaunchInVrEnabled()) {
launcher.addCategory("com.oculus.intent.category.VR")
launcher.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
activity.startActivity(launcher)
activity.finish()
} else {
activity.startActivity(launcher)
}
}
@JvmStatic
@@ -1175,6 +1215,21 @@ class EmulationActivity : AppCompatActivity(), ThemeProvider {
ignoreLaunchRequests = false
}
private fun prepareQuestLaunchSettings(launchSystemMenu: Boolean) {
if (!QuestVrSettings.isQuestBuild()) {
return
}
val settings = Settings()
settings.loadSettings()
try {
QuestVrSettings.prepareLaunchSettings(settings, launchSystemMenu)
settings.saveSettings()
} finally {
settings.close()
}
}
private fun areCoordinatesOutside(view: View?, x: Float, y: Float): Boolean {
if (view == null)
return true
@@ -12,6 +12,8 @@ import androidx.annotation.Keep
*/
@Keep
class Control private constructor(private val pointer: Long) {
external fun getName(): String
external fun getUiName(): String
external fun getControlReference(): ControlReference
@@ -14,6 +14,8 @@ import androidx.annotation.Keep
class ControlGroup private constructor(private val pointer: Long) {
external fun getUiName(): String
external fun getName(): String
external fun getGroupType(): Int
external fun getDefaultEnabledValue(): Int
@@ -55,6 +55,9 @@ class EmulatedController private constructor(private val pointer: Long) : Contro
@JvmStatic
external fun getWiimote(controllerIndex: Int): EmulatedController
@JvmStatic
external fun getHotkeys(): EmulatedController
@JvmStatic
external fun getWiimoteAttachment(
controllerIndex: Int,
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model
class AdHocFloatSetting(
private val file: String,
private val section: String,
private val key: String,
private val defaultValue: Float
) : AbstractFloatSetting {
init {
require(
NativeConfig.isSettingSaveable(
file,
section,
key
)
) { "File/section/key is unknown or legacy" }
}
override val isOverridden: Boolean
get() = NativeConfig.isOverridden(file, section, key)
override val isRuntimeEditable: Boolean = true
override fun delete(settings: Settings): Boolean {
return NativeConfig.deleteKey(settings.writeLayer, file, section, key)
}
override val float: Float
get() = NativeConfig.getFloat(NativeConfig.LAYER_ACTIVE, file, section, key, defaultValue)
override fun setFloat(settings: Settings, newValue: Float) {
NativeConfig.setFloat(settings.writeLayer, file, section, key, newValue)
}
}
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model
class AdHocIntSetting(
private val file: String,
private val section: String,
private val key: String,
private val defaultValue: Int
) : AbstractIntSetting {
init {
require(
NativeConfig.isSettingSaveable(
file,
section,
key
)
) { "File/section/key is unknown or legacy" }
}
override val isOverridden: Boolean
get() = NativeConfig.isOverridden(file, section, key)
override val isRuntimeEditable: Boolean = true
override fun delete(settings: Settings): Boolean {
return NativeConfig.deleteKey(settings.writeLayer, file, section, key)
}
override val int: Int
get() = NativeConfig.getInt(NativeConfig.LAYER_ACTIVE, file, section, key, defaultValue)
override fun setInt(settings: Settings, newValue: Int) {
NativeConfig.setInt(settings.writeLayer, file, section, key, newValue)
}
}
@@ -2,6 +2,7 @@
package org.dolphinemu.dolphinemu.features.settings.model
import org.dolphinemu.dolphinemu.BuildConfig
import java.util.*
enum class BooleanSetting(
@@ -851,7 +852,7 @@ enum class BooleanSetting(
Settings.FILE_GFX,
Settings.SECTION_GFX_HACKS,
"ImmediateXFBEnable",
false
BuildConfig.IS_QUEST
),
GFX_HACK_SKIP_DUPLICATE_XFBS(
Settings.FILE_GFX,
@@ -13,6 +13,7 @@ enum class FloatSetting(
MAIN_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "Overclock", 1.0f),
MAIN_VI_OVERCLOCK(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "VIOverclock", 1.0f),
GFX_CC_GAME_GAMMA(Settings.FILE_GFX, Settings.SECTION_GFX_COLOR_CORRECTION, "GameGamma", 2.35f),
GFX_VR_UNITS_PER_METER(Settings.FILE_GFX, "VR", "UnitsPerMeter", 1.0f),
GFX_STEREO_DEPTH(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoDepth", 20.0f),
GFX_STEREO_CONVERGENCE(Settings.FILE_GFX, Settings.SECTION_STEREOSCOPY, "StereoConvergence", 20.0f);
@@ -0,0 +1,248 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
import java.io.File
object QuestGameOverrideSettings {
enum class Category(
val mainSection: String,
val enabledSection: String,
val defaultEnabledWithoutSection: Boolean
) {
HIDE_OBJECTS("HideObjectCodes", "HideObjectCodes_Enabled", false),
SHADER_OVERRIDES("ShaderOverride", "ShaderOverride_Enable", true),
ELEMENTS_GROUP_OVERRIDES(
"ElementsGroupOverride",
"ElementsGroupOverride_Enable",
true
)
}
data class Entry(val name: String, val enabled: Boolean)
fun loadEntries(gameId: String, revision: Int, category: Category): List<Entry> {
return readMergedEntries(gameId, revision, category)
}
fun isEnabled(gameId: String, revision: Int, category: Category, name: String): Boolean {
return loadEntries(gameId, revision, category).firstOrNull { it.name == name }?.enabled ?: false
}
fun setEnabled(gameId: String, revision: Int, category: Category, name: String, enabled: Boolean) {
val lines = readLines(getUserFile(gameId))
val entries = readMergedEntries(gameId, revision, category)
if (entries.none { it.name == name }) {
return
}
val enabledNames = entries
.filter { if (it.name == name) enabled else it.enabled }
.mapTo(LinkedHashSet()) { it.name }
writeEnabledSection(gameId, lines, category, enabledNames)
}
private data class SectionNames(val hasSection: Boolean, val names: Set<String>)
private fun getUserFile(gameId: String): File =
File(DirectoryInitialization.getUserDirectory(), "GameSettingsVR/$gameId.ini")
private fun getSysIniFile(filename: String): File =
File(DirectoryInitialization.getSysDirectory(), "GameSettingsVR/$filename")
private fun getUserIniFile(filename: String): File =
File(DirectoryInitialization.getUserDirectory(), "GameSettingsVR/$filename")
private data class ParsedFile(
val names: List<String>,
val enabledSection: SectionNames
)
private fun readLines(file: File): List<String> {
return if (file.isFile) file.readLines() else emptyList()
}
private fun parseFile(lines: List<String>, category: Category): ParsedFile =
ParsedFile(
readEntryNames(lines, category.mainSection),
readEntryNamesWithSectionState(lines, category.enabledSection)
)
private fun getGameIniFilenames(gameId: String, revision: Int): List<String> {
if (gameId.isEmpty()) {
return emptyList()
}
val filenames = ArrayList<String>()
if (gameId.length == 6) {
filenames.add("${gameId.substring(0, 1)}.ini")
filenames.add("${gameId.substring(0, 3)}.ini")
}
filenames.add("$gameId.ini")
if (revision != 0) {
filenames.add("${gameId}r$revision.ini")
}
return filenames
}
private fun applyParsedFile(
entriesByName: LinkedHashMap<String, Entry>,
parsed: ParsedFile,
category: Category
) {
parsed.names.forEach { name ->
val enabled = if (parsed.enabledSection.hasSection) {
parsed.enabledSection.names.contains(name)
} else {
category.defaultEnabledWithoutSection
}
entriesByName[name] = Entry(name, enabled)
}
if (parsed.enabledSection.hasSection) {
entriesByName.replaceAll { name, entry ->
entry.copy(enabled = parsed.enabledSection.names.contains(name))
}
}
}
private fun readMergedEntries(gameId: String, revision: Int, category: Category): List<Entry> {
val entriesByName = LinkedHashMap<String, Entry>()
val filenames = getGameIniFilenames(gameId, revision)
filenames.forEach { filename ->
applyParsedFile(
entriesByName,
parseFile(readLines(getSysIniFile(filename)), category),
category
)
}
filenames.forEach { filename ->
applyParsedFile(
entriesByName,
parseFile(readLines(getUserIniFile(filename)), category),
category
)
}
return entriesByName.values.toList()
}
private fun readEntryNames(lines: List<String>, section: String): List<String> {
val result = ArrayList<String>()
var inSection = false
val header = "[$section]"
for (line in lines.map { it.removeSuffix("\r") }) {
if (line == header) {
inSection = true
} else if (inSection && line.startsWith("[")) {
break
} else if (inSection && line.isNotEmpty() && line.startsWith("$")) {
val name = line.substring(1)
if (name.isNotEmpty()) {
result.add(name)
}
}
}
return result
}
private fun readEntryNamesWithSectionState(lines: List<String>, section: String): SectionNames {
var hasSection = false
val names = readEntryNamesWithSectionFlag(lines, section) { hasSection = true }
return SectionNames(hasSection, names)
}
private fun readEntryNamesWithSectionFlag(
lines: List<String>,
section: String,
onSectionFound: () -> Unit
): Set<String> {
val result = LinkedHashSet<String>()
var inSection = false
val header = "[$section]"
for (line in lines.map { it.removeSuffix("\r") }) {
if (line == header) {
inSection = true
onSectionFound()
} else if (inSection && line.startsWith("[")) {
break
} else if (inSection && line.isNotEmpty() && line.startsWith("$")) {
val name = line.substring(1)
if (name.isNotEmpty()) {
result.add(name)
}
}
}
return result
}
private fun writeEnabledSection(
gameId: String,
lines: List<String>,
category: Category,
enabledNames: Set<String>
) {
val stripped = stripSection(lines, category.enabledSection).toMutableList()
val sectionLines = ArrayList<String>()
sectionLines.add("[${category.enabledSection}]")
enabledNames.forEach { sectionLines.add("$" + it) }
val insertIndex = stripped.indexOfFirst { it.removeSuffix("\r") == "[${category.mainSection}]" }
.let { if (it >= 0) it else stripped.size }
if (insertIndex > 0 && stripped[insertIndex - 1].isNotEmpty()) {
sectionLines.add(0, "")
}
stripped.addAll(insertIndex, sectionLines)
val file = getUserFile(gameId)
file.parentFile?.mkdirs()
file.writeText(stripped.joinToString("\n").trimEnd() + "\n")
}
private fun stripSection(lines: List<String>, section: String): List<String> {
val result = ArrayList<String>()
var skipping = false
val header = "[$section]"
for (line in lines) {
val trimmed = line.removeSuffix("\r")
if (trimmed == header) {
skipping = true
continue
}
if (skipping && trimmed.startsWith("[")) {
skipping = false
}
if (!skipping) {
result.add(trimmed)
}
}
return result
}
}
class QuestGameOverrideEnabledSetting(
private val gameId: String,
private val revision: Int,
private val category: QuestGameOverrideSettings.Category,
private val name: String
) : AbstractBooleanSetting {
override val isOverridden: Boolean = true
override val isRuntimeEditable: Boolean = false
override fun delete(settings: Settings): Boolean {
QuestGameOverrideSettings.setEnabled(gameId, revision, category, name, false)
return true
}
override val boolean: Boolean
get() = QuestGameOverrideSettings.isEnabled(gameId, revision, category, name)
override fun setBoolean(settings: Settings, newValue: Boolean) {
QuestGameOverrideSettings.setEnabled(gameId, revision, category, name, newValue)
}
}
@@ -0,0 +1,327 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
import java.io.File
import java.util.Locale
object QuestGameVrConfigSettings {
private const val VR_SECTION = "Graphics.VR"
private const val LEGACY_VR_SECTION = "GFX.VR"
private val knownKeys = setOf(
"EnableOpenXR",
"UnitsPerMeter",
"LeanBackAngle",
"CameraForward",
"CameraHeight",
"VirtualScreen",
"ScreenDistance",
"ScreenSize",
"HeadLockedCurvature",
"DontClearScreen",
"LoadCustomShaders",
"DisableCPUCull",
"OpcodeReplay",
"ForcedVBIFrequency",
"AutoVBIFromHMD",
"AutoLayerSpread",
"LayerOffset",
"ElementDepth",
"ClearEFBCopies",
"UseVulkanMultiview",
"AndroidDirectToHMD",
"ARMode",
"ARModeDebug",
"ARBackgroundAlpha"
)
fun getStoredKeys(gameId: String, revision: Int): Set<String> =
readMergedValues(gameId, revision).keys
fun hasStoredValues(gameId: String, revision: Int): Boolean =
getStoredKeys(gameId, revision).isNotEmpty()
fun getBoolean(gameId: String, revision: Int, key: String, defaultValue: Boolean): Boolean =
parseBoolean(readMergedValues(gameId, revision)[key]) ?: defaultValue
fun setBoolean(gameId: String, key: String, value: Boolean) {
writeLocalValue(gameId, key, if (value) "True" else "False")
}
fun getInt(gameId: String, revision: Int, key: String, defaultValue: Int): Int =
readMergedValues(gameId, revision)[key]?.toIntOrNull() ?: defaultValue
fun setInt(gameId: String, key: String, value: Int) {
writeLocalValue(gameId, key, value.toString())
}
fun getFloat(gameId: String, revision: Int, key: String, defaultValue: Float): Float =
readMergedValues(gameId, revision)[key]?.toFloatOrNull() ?: defaultValue
fun setFloat(gameId: String, key: String, value: Float) {
writeLocalValue(gameId, key, value.toString())
}
fun hasLocalValue(gameId: String, key: String): Boolean =
readVRSectionValues(getUserFile(gameId)).containsKey(key)
fun deleteLocalValue(gameId: String, key: String): Boolean {
val file = getUserFile(gameId)
if (!file.isFile) {
return false
}
val lines = file.readLines()
val updated = ArrayList<String>()
var inVrSection = false
var changed = false
for (line in lines) {
val trimmed = line.removeSuffix("\r").trim()
if (isSectionHeader(trimmed)) {
inVrSection = isVRSectionHeader(trimmed)
updated.add(line.removeSuffix("\r"))
continue
}
if (inVrSection && isKeyLine(trimmed, key)) {
changed = true
continue
}
updated.add(line.removeSuffix("\r"))
}
if (changed) {
file.writeText(updated.joinToString("\n").trimEnd() + "\n")
}
return changed
}
private fun readMergedValues(gameId: String, revision: Int): Map<String, String> {
val values = LinkedHashMap<String, String>()
val filenames = getGameIniFilenames(gameId, revision)
filenames.forEach { filename ->
values.putAll(readVRSectionValues(getSysIniFile(filename)))
}
filenames.forEach { filename ->
values.putAll(readVRSectionValues(getUserIniFile(filename)))
}
return values
}
private fun readVRSectionValues(file: File): Map<String, String> {
if (!file.isFile) {
return emptyMap()
}
val values = LinkedHashMap<String, String>()
var inVrSection = false
file.readLines().forEach { rawLine ->
val line = rawLine.removeSuffix("\r")
val trimmed = line.trim()
if (trimmed.isEmpty()) {
return@forEach
}
if (isSectionHeader(trimmed)) {
inVrSection = isVRSectionHeader(trimmed)
return@forEach
}
if (!inVrSection || trimmed.startsWith("#") || trimmed.startsWith(";") ||
trimmed.startsWith("$") || trimmed.startsWith("*")
) {
return@forEach
}
val separator = trimmed.indexOf('=')
if (separator < 0) {
return@forEach
}
val key = canonicalKey(trimmed.substring(0, separator).trim()) ?: return@forEach
values[key] = trimmed.substring(separator + 1).trim()
}
return values
}
private fun writeLocalValue(gameId: String, key: String, value: String) {
val file = getUserFile(gameId)
val lines = if (file.isFile) file.readLines() else emptyList()
val updated = ArrayList<String>()
var inVrSection = false
var foundVrSection = false
var wroteValue = false
for (line in lines) {
val cleanLine = line.removeSuffix("\r")
val trimmed = cleanLine.trim()
if (isSectionHeader(trimmed)) {
inVrSection = isVRSectionHeader(trimmed)
updated.add(cleanLine)
if (inVrSection) {
foundVrSection = true
updated.add("$key = $value")
wroteValue = true
}
continue
}
if (inVrSection && isKeyLine(trimmed, key)) {
continue
}
updated.add(cleanLine)
}
if (!foundVrSection) {
if (updated.isNotEmpty() && updated.last().isNotEmpty()) {
updated.add("")
}
updated.add("[$VR_SECTION]")
updated.add("$key = $value")
} else if (!wroteValue) {
updated.add("$key = $value")
}
file.parentFile?.mkdirs()
file.writeText(updated.joinToString("\n").trimEnd() + "\n")
}
private fun isKeyLine(line: String, key: String): Boolean {
val separator = line.indexOf('=')
if (separator < 0) {
return false
}
return line.substring(0, separator).trim().equals(key, ignoreCase = true)
}
private fun canonicalKey(key: String): String? =
knownKeys.firstOrNull { it.equals(key, ignoreCase = true) }
private fun isSectionHeader(line: String): Boolean =
line.length >= 3 && line.startsWith("[") && line.endsWith("]")
private fun isVRSectionHeader(line: String): Boolean {
if (!isSectionHeader(line)) {
return false
}
val section = line.substring(1, line.length - 1)
return section.equals(VR_SECTION, ignoreCase = true) ||
section.equals(LEGACY_VR_SECTION, ignoreCase = true)
}
private fun parseBoolean(value: String?): Boolean? {
return when (value?.trim()?.lowercase(Locale.ROOT)) {
"true", "1", "yes", "on" -> true
"false", "0", "no", "off" -> false
else -> null
}
}
private fun getUserFile(gameId: String): File =
File(DirectoryInitialization.getUserDirectory(), "GameSettingsVR/$gameId.ini")
private fun getSysIniFile(filename: String): File =
File(DirectoryInitialization.getSysDirectory(), "GameSettingsVR/$filename")
private fun getUserIniFile(filename: String): File =
File(DirectoryInitialization.getUserDirectory(), "GameSettingsVR/$filename")
private fun getGameIniFilenames(gameId: String, revision: Int): List<String> {
if (gameId.isEmpty()) {
return emptyList()
}
val filenames = ArrayList<String>()
if (gameId.length == 6) {
filenames.add("${gameId.substring(0, 1)}.ini")
filenames.add("${gameId.substring(0, 3)}.ini")
}
filenames.add("$gameId.ini")
if (revision != 0) {
filenames.add("${gameId}r$revision.ini")
}
return filenames
}
}
class QuestGameVrConfigBooleanSetting(
private val gameId: String,
private val revision: Int,
private val key: String,
private val defaultValue: Boolean
) : AbstractBooleanSetting {
override val isOverridden: Boolean
get() = QuestGameVrConfigSettings.hasLocalValue(gameId, key)
override val isRuntimeEditable: Boolean
get() = NativeLibrary.IsUninitialized()
override fun delete(settings: Settings): Boolean =
QuestGameVrConfigSettings.deleteLocalValue(gameId, key)
override val boolean: Boolean
get() = QuestGameVrConfigSettings.getBoolean(gameId, revision, key, defaultValue)
override fun setBoolean(settings: Settings, newValue: Boolean) {
QuestGameVrConfigSettings.setBoolean(gameId, key, newValue)
}
}
class QuestGameVrConfigIntSetting(
private val gameId: String,
private val revision: Int,
private val key: String,
private val defaultValue: Int
) : AbstractIntSetting {
override val isOverridden: Boolean
get() = QuestGameVrConfigSettings.hasLocalValue(gameId, key)
override val isRuntimeEditable: Boolean
get() = NativeLibrary.IsUninitialized()
override fun delete(settings: Settings): Boolean =
QuestGameVrConfigSettings.deleteLocalValue(gameId, key)
override val int: Int
get() = QuestGameVrConfigSettings.getInt(gameId, revision, key, defaultValue)
override fun setInt(settings: Settings, newValue: Int) {
QuestGameVrConfigSettings.setInt(gameId, key, newValue)
}
}
class QuestGameVrConfigFloatSetting(
private val gameId: String,
private val revision: Int,
private val key: String,
private val defaultValue: Float
) : AbstractFloatSetting {
override val isOverridden: Boolean
get() = QuestGameVrConfigSettings.hasLocalValue(gameId, key)
override val isRuntimeEditable: Boolean
get() = NativeLibrary.IsUninitialized()
override fun delete(settings: Settings): Boolean =
QuestGameVrConfigSettings.deleteLocalValue(gameId, key)
override val float: Float
get() = QuestGameVrConfigSettings.getFloat(gameId, revision, key, defaultValue)
override fun setFloat(settings: Settings, newValue: Float) {
QuestGameVrConfigSettings.setFloat(gameId, key, newValue)
}
}
@@ -0,0 +1,222 @@
// SPDX-License-Identifier: GPL-2.0-or-later
package org.dolphinemu.dolphinemu.features.settings.model
import org.dolphinemu.dolphinemu.BuildConfig
import org.dolphinemu.dolphinemu.features.input.model.controlleremu.EmulatedController
object QuestVrSettings {
const val STEREO_MODE_OPENXR = 6
const val CONTROLLER_PRESET_GAMECUBE = 0
const val CONTROLLER_PRESET_WII_REMOTE = 1
private const val GC_PROFILE_NAME = "Quest Touch GameCube.ini"
private const val WIIMOTE_PROFILE_NAME = "OpenXR Wii Remote.ini"
private const val VR_SECTION = "VR"
private fun androidBooleanSetting(key: String, defaultValue: Boolean) =
AdHocBooleanSetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_ANDROID, key, defaultValue)
private fun androidIntSetting(key: String, defaultValue: Int) =
AdHocIntSetting(Settings.FILE_DOLPHIN, Settings.SECTION_INI_ANDROID, key, defaultValue)
private fun vrBooleanSetting(key: String, defaultValue: Boolean) =
AdHocBooleanSetting(Settings.FILE_GFX, VR_SECTION, key, defaultValue)
private fun vrIntSetting(key: String, defaultValue: Int) =
AdHocIntSetting(Settings.FILE_GFX, VR_SECTION, key, defaultValue)
private fun vrFloatSetting(key: String, defaultValue: Float) =
AdHocFloatSetting(Settings.FILE_GFX, VR_SECTION, key, defaultValue)
fun isQuestBuild(): Boolean = BuildConfig.IS_QUEST
fun openXrEnabledSetting() = androidBooleanSetting("QuestOpenXREnabled", true)
fun launchInVrSetting() = androidBooleanSetting("QuestLaunchInVr", true)
fun recenterOnLaunchSetting() = androidBooleanSetting("QuestRecenterOnLaunch", true)
fun leftHandedSetting() = androidBooleanSetting("QuestLeftHanded", false)
fun showMirrorSurfaceSetting() = androidBooleanSetting("QuestShowMirrorSurface", false)
fun controllerPresetSetting() =
androidIntSetting("QuestControllerPreset", CONTROLLER_PRESET_GAMECUBE)
fun passthroughSetting() = vrBooleanSetting("ARMode", false)
fun debugPassthroughSetting() = vrBooleanSetting("ARModeDebug", false)
fun arBackgroundAlphaSetting() = vrFloatSetting("ARBackgroundAlpha", 0.0f)
fun autoImmediateXfbSetting() = vrBooleanSetting("AutoImmediateXFB", true)
fun autoVbiFromHmdSetting() = vrBooleanSetting("AutoVBIFromHMD", false)
fun unitsPerMeterSetting(): AbstractFloatSetting = FloatSetting.GFX_VR_UNITS_PER_METER
fun leanBackAngleSetting() = vrFloatSetting("LeanBackAngle", 0.0f)
fun cameraForwardSetting() = vrFloatSetting("CameraForward", 0.0f)
fun cameraHeightSetting() = vrFloatSetting("CameraHeight", 0.0f)
fun lockHeadPoseSetting() = vrBooleanSetting("LockHeadPosePerFrame", false)
fun opcodeReplaySetting() = vrIntSetting("OpcodeReplay", 0)
fun vrGammaSetting() = vrFloatSetting("Gamma", 1.0f)
fun autoLayerSpreadSetting() = vrBooleanSetting("AutoLayerSpread", true)
fun layerOffsetSetting() = vrFloatSetting("LayerOffset", 0.002f)
fun elementDepthSetting() = vrFloatSetting("ElementDepth", 0.001f)
fun removeBarsSetting() = vrBooleanSetting("RemoveCinematicBars", true)
fun useVulkanMultiviewSetting() = vrBooleanSetting("UseVulkanMultiview", true)
fun androidDirectToHmdSetting() = vrBooleanSetting("AndroidDirectToHMD", true)
fun cpuLevel5HintSetting() = vrBooleanSetting("QuestCpuLevel5Hint", false)
fun virtualScreenSetting() = vrBooleanSetting("VirtualScreen", false)
fun screenDistanceSetting() = vrFloatSetting("ScreenDistance", 1.5f)
fun screenSizeSetting() = vrFloatSetting("ScreenSize", 1.5f)
fun headLockedCurvatureSetting() = vrFloatSetting("HeadLockedCurvature", 0.0f)
fun dontClearScreenSetting() = vrBooleanSetting("DontClearScreen", false)
fun disableCpuCullSetting() = vrBooleanSetting("DisableCPUCull", false)
fun clearEfbCopiesSetting() = vrIntSetting("ClearEFBCopies", 0)
fun loadCustomShadersSetting() = vrBooleanSetting("LoadCustomShaders", false)
fun openXrConfigSceneSetting() = vrBooleanSetting("EnableOpenXRConfigScene", true)
private fun openXrRuntimeSetting() = vrBooleanSetting("EnableOpenXR", false)
private fun perfDefaultsAppliedSetting() = androidBooleanSetting("QuestPerfProfileApplied", false)
private fun backendMultithreadingReenabledSetting() =
androidBooleanSetting("QuestBackendMultithreadingReenabled", false)
private fun controllerProfilesAppliedSetting() =
androidBooleanSetting("QuestControllerProfilesApplied", false)
fun shouldShowMirrorSurface(): Boolean {
if (!BuildConfig.IS_QUEST) {
return true
}
return showMirrorSurfaceSetting().boolean || !isLaunchInVrEnabled()
}
fun isLaunchInVrEnabled(): Boolean {
return BuildConfig.IS_QUEST &&
openXrEnabledSetting().boolean &&
launchInVrSetting().boolean
}
fun applyRecommendedDefaults(settings: Settings) {
if (!BuildConfig.IS_QUEST) {
return
}
StringSetting.MAIN_GFX_BACKEND.setString(settings, "Vulkan")
BooleanSetting.GFX_BACKEND_MULTITHREADING.setBoolean(settings, true)
IntSetting.GFX_EFB_SCALE.setInt(settings, 4)
BooleanSetting.GFX_WAIT_FOR_SHADERS_BEFORE_STARTING.setBoolean(settings, false)
BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.setBoolean(settings, false)
lockHeadPoseSetting().setBoolean(settings, false)
autoLayerSpreadSetting().setBoolean(settings, true)
androidDirectToHmdSetting().setBoolean(settings, true)
removeBarsSetting().setBoolean(settings, true)
virtualScreenSetting().setBoolean(settings, false)
passthroughSetting().setBoolean(settings, false)
debugPassthroughSetting().setBoolean(settings, false)
BooleanSetting.GFX_HACK_IMMEDIATE_XFB.setBoolean(settings, true)
BooleanSetting.GFX_HACK_VI_SKIP.setBoolean(settings, false)
perfDefaultsAppliedSetting().setBoolean(settings, true)
backendMultithreadingReenabledSetting().setBoolean(settings, true)
}
fun applySelectedControllerPreset(settings: Settings) {
applyControllerPreset(settings, controllerPresetSetting().int)
}
fun prepareLaunchSettings(settings: Settings, launchSystemMenu: Boolean) {
if (!BuildConfig.IS_QUEST) {
return
}
if (!perfDefaultsAppliedSetting().boolean) {
applyRecommendedDefaults(settings)
}
StringSetting.MAIN_GFX_BACKEND.setString(settings, "Vulkan")
val launchInVr = isLaunchInVrEnabled()
openXrRuntimeSetting().setBoolean(settings, launchInVr)
if (launchInVr) {
IntSetting.GFX_STEREO_MODE.setInt(settings, STEREO_MODE_OPENXR)
if (!backendMultithreadingReenabledSetting().boolean) {
BooleanSetting.GFX_BACKEND_MULTITHREADING.setBoolean(settings, true)
backendMultithreadingReenabledSetting().setBoolean(settings, true)
}
BooleanSetting.MAIN_SHOW_INPUT_OVERLAY.setBoolean(settings, false)
if (lockHeadPoseSetting().boolean) {
autoImmediateXfbSetting().setBoolean(settings, false)
BooleanSetting.GFX_HACK_IMMEDIATE_XFB.setBoolean(settings, false)
} else if (autoImmediateXfbSetting().boolean) {
BooleanSetting.GFX_HACK_IMMEDIATE_XFB.setBoolean(settings, true)
}
BooleanSetting.GFX_HACK_VI_SKIP.setBoolean(settings, false)
} else if (IntSetting.GFX_STEREO_MODE.int == STEREO_MODE_OPENXR) {
IntSetting.GFX_STEREO_MODE.setInt(settings, 0)
}
if (launchSystemMenu) {
applyControllerPreset(settings, CONTROLLER_PRESET_WII_REMOTE)
} else {
applySelectedControllerPreset(settings)
}
}
fun applyControllerPreset(settings: Settings, preset: Int) {
if (!BuildConfig.IS_QUEST) {
return
}
if (!controllerProfilesAppliedSetting().boolean) {
EmulatedController.getGcPad(0).loadProfile(
EmulatedController.getGcPad(0).getSysProfileDirectoryPath() + GC_PROFILE_NAME
)
EmulatedController.getWiimote(0).loadProfile(
EmulatedController.getWiimote(0).getSysProfileDirectoryPath() + WIIMOTE_PROFILE_NAME
)
controllerProfilesAppliedSetting().setBoolean(settings, true)
}
when (preset) {
CONTROLLER_PRESET_WII_REMOTE -> applyWiiRemoteSource(settings)
else -> applyGameCubeSource(settings)
}
}
private fun applyGameCubeSource(settings: Settings) {
IntSetting.MAIN_SI_DEVICE_0.setInt(settings, 6)
IntSetting.WIIMOTE_1_SOURCE.setInt(settings, 0)
}
private fun applyWiiRemoteSource(settings: Settings) {
IntSetting.WIIMOTE_1_SOURCE.setInt(settings, 3)
}
}
@@ -21,10 +21,15 @@ enum class MenuTag {
GRAPHICS("graphics"),
ENHANCEMENTS("enhancements"),
COLOR_CORRECTION("color_correction"),
OPENXR("openxr"),
STEREOSCOPY("stereoscopy"),
HACKS("hacks"),
STATISTICS("statistics"),
ADVANCED_GRAPHICS("advanced_graphics"),
QUEST_VR_CONFIG("quest_vr_config"),
QUEST_HIDE_OBJECTS("quest_hide_objects"),
QUEST_SHADER_OVERRIDES("quest_shader_overrides"),
QUEST_ELEMENTS_GROUP_OVERRIDES("quest_elements_group_overrides"),
GCPAD_TYPE("gc_pad_type"),
WIIMOTE("wiimote"),
WIIMOTE_EXTENSION("wiimote_extension"),
@@ -52,6 +57,20 @@ enum class MenuTag {
WIIMOTE_MOTION_INPUT_2("wiimote_motion_input", 1),
WIIMOTE_MOTION_INPUT_3("wiimote_motion_input", 2),
WIIMOTE_MOTION_INPUT_4("wiimote_motion_input", 3),
HOTKEYS("hotkeys"),
HOTKEYS_GENERAL("hotkeys_general"),
HOTKEYS_TAS("hotkeys_tas"),
HOTKEYS_DEBUGGING("hotkeys_debugging"),
HOTKEYS_WII("hotkeys_wii"),
HOTKEYS_CONTROLLER_PROFILE("hotkeys_controller_profile"),
HOTKEYS_GRAPHICS("hotkeys_graphics"),
HOTKEYS_VR("hotkeys_vr"),
HOTKEYS_3D("hotkeys_3d"),
HOTKEYS_SAVE_STATES("hotkeys_save_states"),
HOTKEYS_STATES_OTHER("hotkeys_states_other"),
HOTKEYS_GBA("hotkeys_gba"),
HOTKEYS_USB("hotkeys_usb"),
HOTKEYS_ANDROID("hotkeys_android"),
GPU_DRIVERS("gpu_drivers");
var tag: String
@@ -75,9 +94,12 @@ enum class MenuTag {
}
val correspondingEmulatedController: EmulatedController
get() = if (isGCPadMenu) EmulatedController.getGcPad(subType) else if (isWiimoteMenu) EmulatedController.getWiimote(
subType
) else throw UnsupportedOperationException()
get() = when {
isGCPadMenu -> EmulatedController.getGcPad(subType)
isWiimoteMenu -> EmulatedController.getWiimote(subType)
isHotkeyMenu -> EmulatedController.getHotkeys()
else -> throw UnsupportedOperationException()
}
val isSerialPort1Menu: Boolean
get() = this == CONFIG_SERIALPORT1
@@ -99,6 +121,16 @@ enum class MenuTag {
val isWiimoteExtensionMenu: Boolean
get() = this == WIIMOTE_EXTENSION_1 || this == WIIMOTE_EXTENSION_2 || this == WIIMOTE_EXTENSION_3 || this == WIIMOTE_EXTENSION_4
val isHotkeyMenu: Boolean
get() = this == HOTKEYS || isHotkeyCategoryMenu
val isHotkeyCategoryMenu: Boolean
get() = this == HOTKEYS_GENERAL || this == HOTKEYS_TAS || this == HOTKEYS_DEBUGGING ||
this == HOTKEYS_WII || this == HOTKEYS_CONTROLLER_PROFILE ||
this == HOTKEYS_GRAPHICS || this == HOTKEYS_VR || this == HOTKEYS_3D ||
this == HOTKEYS_SAVE_STATES || this == HOTKEYS_STATES_OTHER ||
this == HOTKEYS_GBA || this == HOTKEYS_USB || this == HOTKEYS_ANDROID
companion object {
@JvmStatic
fun getGCPadMenuTag(subtype: Int): MenuTag {
@@ -5,6 +5,8 @@ package org.dolphinemu.dolphinemu.features.settings.ui
import android.os.Bundle
import android.text.TextUtils
import androidx.appcompat.app.AppCompatActivity
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner
import org.dolphinemu.dolphinemu.utils.Log
@@ -49,6 +51,14 @@ class SettingsActivityPresenter(
activityView.hideLoading()
if (!settings!!.areSettingsLoaded()) {
if (!TextUtils.isEmpty(gameId)) {
if (!NativeLibrary.IsUninitialized()) {
activityView.showToastMessage(
activity.getString(R.string.setting_not_runtime_editable)
)
activityView.finish()
return
}
settings!!.loadSettings(gameId!!, revision, isWii)
if (settings!!.gameIniContainsJunk()) {
activityView.showGameIniJunkDeletionQuestion()
@@ -57,7 +67,7 @@ class SettingsActivityPresenter(
settings!!.loadSettings(isWii)
}
}
activityView.showSettingsFragment(menuTag!!, null, false, gameId!!)
activityView.showSettingsFragment(menuTag!!, fragmentExtrasWithRevision(null), false, gameId!!)
activityView.onSettingsFileLoaded(settings!!)
}
@@ -90,7 +100,7 @@ class SettingsActivityPresenter(
if (value != 0 && value != 255) {
val bundle = Bundle()
bundle.putInt(SettingsFragmentPresenter.ARG_SERIALPORT1_TYPE, value)
activityView.showSettingsFragment(menuTag, bundle, true, gameId!!)
activityView.showSettingsFragment(menuTag, fragmentExtrasWithRevision(bundle), true, gameId!!)
}
}
if (menuTag.isGCPadMenu) {
@@ -99,13 +109,13 @@ class SettingsActivityPresenter(
{
val bundle = Bundle()
bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value)
activityView.showSettingsFragment(menuTag, bundle, true, gameId!!)
activityView.showSettingsFragment(menuTag, fragmentExtrasWithRevision(bundle), true, gameId!!)
}
}
if (menuTag.isWiimoteMenu) {
// Emulated Wii Remote
if (value == 1) {
activityView.showSettingsFragment(menuTag, null, true, gameId!!)
// Emulated Wii Remote (1) or OpenXR Wii Remote (3) — both share the emulated bindings UI
if (value == 1 || value == 3) {
activityView.showSettingsFragment(menuTag, fragmentExtrasWithRevision(null), true, gameId!!)
}
}
if (menuTag.isWiimoteExtensionMenu) {
@@ -113,7 +123,7 @@ class SettingsActivityPresenter(
if (value != 0) {
val bundle = Bundle()
bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value)
activityView.showSettingsFragment(menuTag, bundle, true, gameId!!)
activityView.showSettingsFragment(menuTag, fragmentExtrasWithRevision(bundle), true, gameId!!)
}
}
}
@@ -128,12 +138,18 @@ class SettingsActivityPresenter(
return value != 0
}
if (menuTag.isWiimoteMenu) {
// Emulated Wii Remote
return value == 1
// Emulated Wii Remote (1) or OpenXR Wii Remote (3)
return value == 1 || value == 3
}
return if (menuTag.isWiimoteExtensionMenu) {
// Not disabled
value != 0
} else false
}
private fun fragmentExtrasWithRevision(extras: Bundle?): Bundle {
val bundle = extras ?: Bundle()
bundle.putInt(SettingsFragmentPresenter.ARG_REVISION, revision)
return bundle
}
}
@@ -140,7 +140,9 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
activityView!!.showSettingsFragment(
menuKey,
null,
Bundle().apply {
putInt(SettingsFragmentPresenter.ARG_REVISION, requireArguments().getInt(ARGUMENT_REVISION))
},
true,
requireArguments().getString(ARGUMENT_GAME_ID)!!
)
@@ -256,6 +258,7 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
companion object {
private const val ARGUMENT_MENU_TAG = "menu_tag"
private const val ARGUMENT_GAME_ID = "game_id"
private const val ARGUMENT_REVISION = SettingsFragmentPresenter.ARG_REVISION
private val titles: MutableMap<MenuTag, Int> = EnumMap(MenuTag::class.java)
init {
@@ -274,10 +277,15 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
titles[MenuTag.GRAPHICS] = R.string.graphics_settings
titles[MenuTag.ENHANCEMENTS] = R.string.enhancements_submenu
titles[MenuTag.COLOR_CORRECTION] = R.string.color_correction_submenu
titles[MenuTag.OPENXR] = R.string.openxr_submenu
titles[MenuTag.STEREOSCOPY] = R.string.stereoscopy_submenu
titles[MenuTag.HACKS] = R.string.hacks_submenu
titles[MenuTag.STATISTICS] = R.string.statistics_submenu
titles[MenuTag.ADVANCED_GRAPHICS] = R.string.advanced_graphics_submenu
titles[MenuTag.QUEST_VR_CONFIG] = R.string.quest_vr_config
titles[MenuTag.QUEST_HIDE_OBJECTS] = R.string.quest_hide_objects
titles[MenuTag.QUEST_SHADER_OVERRIDES] = R.string.quest_shader_overrides
titles[MenuTag.QUEST_ELEMENTS_GROUP_OVERRIDES] = R.string.quest_elements_group_overrides
titles[MenuTag.CONFIG_LOG] = R.string.log_submenu
titles[MenuTag.GCPAD_TYPE] = R.string.gcpad_settings
titles[MenuTag.WIIMOTE] = R.string.wiimote_settings
@@ -306,6 +314,20 @@ class SettingsFragment : Fragment(), SettingsFragmentView {
titles[MenuTag.WIIMOTE_MOTION_INPUT_2] = R.string.wiimote_motion_input
titles[MenuTag.WIIMOTE_MOTION_INPUT_3] = R.string.wiimote_motion_input
titles[MenuTag.WIIMOTE_MOTION_INPUT_4] = R.string.wiimote_motion_input
titles[MenuTag.HOTKEYS] = R.string.hotkey_settings
titles[MenuTag.HOTKEYS_GENERAL] = R.string.hotkey_general
titles[MenuTag.HOTKEYS_TAS] = R.string.hotkey_tas
titles[MenuTag.HOTKEYS_DEBUGGING] = R.string.hotkey_debugging
titles[MenuTag.HOTKEYS_WII] = R.string.hotkey_wii
titles[MenuTag.HOTKEYS_CONTROLLER_PROFILE] = R.string.hotkey_controller_profile
titles[MenuTag.HOTKEYS_GRAPHICS] = R.string.hotkey_graphics
titles[MenuTag.HOTKEYS_VR] = R.string.hotkey_vr
titles[MenuTag.HOTKEYS_3D] = R.string.hotkey_3d
titles[MenuTag.HOTKEYS_SAVE_STATES] = R.string.hotkey_save_states
titles[MenuTag.HOTKEYS_STATES_OTHER] = R.string.hotkey_states_other
titles[MenuTag.HOTKEYS_GBA] = R.string.hotkey_gba
titles[MenuTag.HOTKEYS_USB] = R.string.hotkey_usb
titles[MenuTag.HOTKEYS_ANDROID] = R.string.hotkey_android
}
@JvmStatic
@@ -2,6 +2,7 @@
package org.dolphinemu.dolphinemu.features.settings.ui
import org.dolphinemu.dolphinemu.BuildConfig
import android.content.Context
import android.content.pm.PackageManager
import android.net.Uri
@@ -44,6 +45,7 @@ class SettingsFragmentPresenter(
) {
private lateinit var menuTag: MenuTag
private var gameId: String? = null
private var revision = 0
private var settingsList: ArrayList<SettingsItem>? = null
private var hasOldControllerSettings = false
@@ -58,6 +60,7 @@ class SettingsFragmentPresenter(
fun onCreate(menuTag: MenuTag, gameId: String?, extras: Bundle) {
this.gameId = gameId
this.menuTag = menuTag
this.revision = extras.getInt(ARG_REVISION, 0)
if (menuTag.isGCPadMenu || menuTag.isWiimoteExtensionMenu) {
controllerNumber = menuTag.subType
@@ -118,10 +121,24 @@ class SettingsFragmentPresenter(
MenuTag.WIIMOTE -> addWiimoteSettings(sl)
MenuTag.ENHANCEMENTS -> addEnhanceSettings(sl)
MenuTag.COLOR_CORRECTION -> addColorCorrectionSettings(sl)
MenuTag.OPENXR -> addOpenXrSettings(sl)
MenuTag.STEREOSCOPY -> addStereoSettings(sl)
MenuTag.HACKS -> addHackSettings(sl)
MenuTag.STATISTICS -> addStatisticsSettings(sl)
MenuTag.ADVANCED_GRAPHICS -> addAdvancedGraphicsSettings(sl)
MenuTag.QUEST_HIDE_OBJECTS -> addQuestOverrideSettings(
sl,
QuestGameOverrideSettings.Category.HIDE_OBJECTS
)
MenuTag.QUEST_SHADER_OVERRIDES -> addQuestOverrideSettings(
sl,
QuestGameOverrideSettings.Category.SHADER_OVERRIDES
)
MenuTag.QUEST_ELEMENTS_GROUP_OVERRIDES -> addQuestOverrideSettings(
sl,
QuestGameOverrideSettings.Category.ELEMENTS_GROUP_OVERRIDES
)
MenuTag.QUEST_VR_CONFIG -> addQuestGameVrConfigSettings(sl)
MenuTag.CONFIG_LOG -> addLogConfigurationSettings(sl)
MenuTag.DEBUG -> addDebugSettings(sl)
MenuTag.GCPAD_1,
@@ -174,6 +191,22 @@ class SettingsFragmentPresenter(
controllerNumber
)
MenuTag.HOTKEYS -> addHotkeySettings(sl)
MenuTag.HOTKEYS_GENERAL,
MenuTag.HOTKEYS_TAS,
MenuTag.HOTKEYS_DEBUGGING,
MenuTag.HOTKEYS_WII,
MenuTag.HOTKEYS_CONTROLLER_PROFILE,
MenuTag.HOTKEYS_GRAPHICS,
MenuTag.HOTKEYS_VR,
MenuTag.HOTKEYS_3D,
MenuTag.HOTKEYS_SAVE_STATES,
MenuTag.HOTKEYS_STATES_OTHER,
MenuTag.HOTKEYS_GBA,
MenuTag.HOTKEYS_USB,
MenuTag.HOTKEYS_ANDROID -> addHotkeyCategorySettings(sl, menuTag)
else -> throw UnsupportedOperationException("Unimplemented menu")
}
@@ -184,11 +217,33 @@ class SettingsFragmentPresenter(
private fun addTopLevelSettings(sl: ArrayList<SettingsItem>) {
sl.add(SubmenuSetting(context, R.string.config, MenuTag.CONFIG))
sl.add(SubmenuSetting(context, R.string.graphics_settings, MenuTag.GRAPHICS))
if (BuildConfig.IS_QUEST && gameId.isNullOrEmpty()) {
sl.add(SubmenuSetting(context, R.string.openxr_submenu, MenuTag.OPENXR))
}
if (BuildConfig.IS_QUEST && !gameId.isNullOrEmpty()) {
sl.add(SubmenuSetting(context, R.string.quest_vr_config, MenuTag.QUEST_VR_CONFIG))
sl.add(SubmenuSetting(context, R.string.quest_hide_objects, MenuTag.QUEST_HIDE_OBJECTS))
sl.add(
SubmenuSetting(
context,
R.string.quest_shader_overrides,
MenuTag.QUEST_SHADER_OVERRIDES
)
)
sl.add(
SubmenuSetting(
context,
R.string.quest_elements_group_overrides,
MenuTag.QUEST_ELEMENTS_GROUP_OVERRIDES
)
)
}
sl.add(SubmenuSetting(context, R.string.gcpad_settings, MenuTag.GCPAD_TYPE))
if (settings!!.isWii) {
sl.add(SubmenuSetting(context, R.string.wiimote_settings, MenuTag.WIIMOTE))
}
sl.add(SubmenuSetting(context, R.string.hotkey_settings, MenuTag.HOTKEYS))
sl.add(HeaderSetting(context, R.string.setting_clear_info, 0))
}
@@ -1659,7 +1714,9 @@ class SettingsFragmentPresenter(
// If we only support OpenGLES then we need both OpenGLES 3.1 and AEP
val helper = EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT)
if (helper.supportsOpenGL() && helper.GetVersion() >= 320 || helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension(
if (BuildConfig.IS_QUEST ||
helper.supportsOpenGL() && helper.GetVersion() >= 320 ||
helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension(
"GL_ANDROID_extension_pack_es31a"
)
) {
@@ -2360,6 +2417,688 @@ class SettingsFragmentPresenter(
)
}
private fun addOpenXrSettings(sl: ArrayList<SettingsItem>) {
addQuestVrSettings(sl)
}
private fun addQuestOverrideSettings(
sl: ArrayList<SettingsItem>,
category: QuestGameOverrideSettings.Category
) {
val currentGameId = gameId
if (currentGameId.isNullOrEmpty()) {
sl.add(HeaderSetting(context, R.string.quest_no_stored_overrides, 0))
return
}
val entries = QuestGameOverrideSettings.loadEntries(currentGameId, revision, category)
if (entries.isEmpty()) {
sl.add(HeaderSetting(context, R.string.quest_no_stored_overrides, 0))
return
}
val descriptionId = when (category) {
QuestGameOverrideSettings.Category.HIDE_OBJECTS ->
R.string.quest_hide_objects_description
QuestGameOverrideSettings.Category.SHADER_OVERRIDES ->
R.string.quest_shader_overrides_description
QuestGameOverrideSettings.Category.ELEMENTS_GROUP_OVERRIDES ->
R.string.quest_elements_group_overrides_description
}
for (entry in entries) {
sl.add(
SwitchSetting(
QuestGameOverrideEnabledSetting(currentGameId, revision, category, entry.name),
entry.name,
context.getString(descriptionId)
)
)
}
}
private fun addQuestGameVrConfigSettings(sl: ArrayList<SettingsItem>) {
val currentGameId = gameId
if (currentGameId.isNullOrEmpty()) {
sl.add(HeaderSetting(context, R.string.quest_no_stored_vr_config, 0))
return
}
sl.add(HeaderSetting(context, R.string.quest_vr_config_description, 0))
fun addBoolean(key: String, defaultValue: Boolean, titleId: Int, descriptionId: Int) {
sl.add(
SwitchSetting(
context,
QuestGameVrConfigBooleanSetting(currentGameId, revision, key, defaultValue),
titleId,
descriptionId
)
)
}
fun addFloat(
key: String,
defaultValue: Float,
titleId: Int,
descriptionId: Int,
min: Float,
max: Float,
step: Float
) {
sl.add(
FloatSliderSetting(
context,
QuestGameVrConfigFloatSetting(currentGameId, revision, key, defaultValue),
titleId,
descriptionId,
min,
max,
"",
step,
true
)
)
}
fun addIntSlider(
key: String,
defaultValue: Int,
titleId: Int,
descriptionId: Int,
min: Int,
max: Int,
step: Int
) {
sl.add(
IntSliderSetting(
context,
QuestGameVrConfigIntSetting(currentGameId, revision, key, defaultValue),
titleId,
descriptionId,
min,
max,
"",
step
)
)
}
addBoolean(
"EnableOpenXR",
false,
R.string.quest_enable_openxr,
R.string.quest_enable_openxr_description
)
addBoolean(
"AutoVBIFromHMD",
false,
R.string.quest_force_vbi_from_hmd,
R.string.quest_force_vbi_from_hmd_description
)
addFloat(
"UnitsPerMeter",
1.0f,
R.string.quest_units_per_meter,
R.string.quest_units_per_meter_description,
0.1f,
500.0f,
0.1f
)
addFloat(
"LeanBackAngle",
0.0f,
R.string.quest_lean_back_angle,
R.string.quest_lean_back_angle_description,
-45.0f,
45.0f,
0.1f
)
addFloat(
"CameraForward",
0.0f,
R.string.quest_camera_forward,
R.string.quest_camera_forward_description,
-20.0f,
20.0f,
0.1f
)
addFloat(
"CameraHeight",
0.0f,
R.string.quest_camera_height,
R.string.quest_camera_height_description,
-20.0f,
20.0f,
0.1f
)
addBoolean(
"VirtualScreen",
true,
R.string.quest_virtual_screen,
R.string.quest_virtual_screen_description
)
addFloat(
"ScreenDistance",
1.5f,
R.string.quest_screen_distance,
R.string.quest_screen_distance_description,
0.5f,
10.0f,
0.1f
)
addFloat(
"ScreenSize",
1.5f,
R.string.quest_screen_size,
R.string.quest_screen_size_description,
0.5f,
5.0f,
0.1f
)
addFloat(
"HeadLockedCurvature",
0.0f,
R.string.quest_head_locked_curvature,
R.string.quest_head_locked_curvature_description,
0.0f,
5.0f,
0.01f
)
addBoolean(
"DontClearScreen",
false,
R.string.quest_dont_clear_screen,
R.string.quest_dont_clear_screen_description
)
addBoolean(
"LoadCustomShaders",
false,
R.string.quest_load_custom_shaders,
R.string.quest_load_custom_shaders_description
)
addBoolean(
"DisableCPUCull",
false,
R.string.quest_disable_cpu_culling,
R.string.quest_disable_cpu_culling_description
)
sl.add(
SingleChoiceSetting(
context,
QuestGameVrConfigIntSetting(currentGameId, revision, "OpcodeReplay", 0),
R.string.quest_opcode_replay,
R.string.quest_opcode_replay_description,
R.array.questOpcodeReplayEntries,
R.array.questOpcodeReplayValues
)
)
addBoolean(
"AutoLayerSpread",
true,
R.string.quest_auto_layer_spread,
R.string.quest_auto_layer_spread_description
)
addFloat(
"LayerOffset",
0.002f,
R.string.quest_layer_offset,
R.string.quest_layer_offset_description,
0.0001f,
0.01f,
0.0001f
)
addFloat(
"ElementDepth",
0.001f,
R.string.quest_element_depth,
R.string.quest_element_depth_description,
0.0f,
0.1f,
0.0001f
)
addIntSlider(
"ClearEFBCopies",
0,
R.string.quest_clear_efb_copies,
R.string.quest_clear_efb_copies_description,
0,
640,
10
)
addBoolean(
"UseVulkanMultiview",
true,
R.string.quest_use_vulkan_multiview,
R.string.quest_use_vulkan_multiview_description
)
addBoolean(
"AndroidDirectToHMD",
false,
R.string.quest_android_direct_to_hmd,
R.string.quest_android_direct_to_hmd_description
)
addBoolean(
"ARMode",
false,
R.string.quest_passthrough,
R.string.quest_passthrough_description
)
addBoolean(
"ARModeDebug",
false,
R.string.quest_passthrough_debug,
R.string.quest_passthrough_debug_description
)
addFloat(
"ARBackgroundAlpha",
0.0f,
R.string.quest_ar_background_alpha,
R.string.quest_ar_background_alpha_description,
0.0f,
1.0f,
0.05f
)
}
private fun addQuestVrSettings(sl: ArrayList<SettingsItem>) {
sl.add(HeaderSetting(context, R.string.quest_vr_runtime, 0))
sl.add(
SwitchSetting(
context,
QuestVrSettings.openXrEnabledSetting(),
R.string.quest_enable_openxr,
R.string.quest_enable_openxr_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.launchInVrSetting(),
R.string.quest_launch_in_vr,
R.string.quest_launch_in_vr_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.recenterOnLaunchSetting(),
R.string.quest_recenter_on_launch,
R.string.quest_recenter_on_launch_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.autoImmediateXfbSetting(),
R.string.quest_force_immediately_present_xfb,
R.string.quest_force_immediately_present_xfb_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.autoVbiFromHmdSetting(),
R.string.quest_force_vbi_from_hmd,
R.string.quest_force_vbi_from_hmd_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.cpuLevel5HintSetting(),
R.string.quest_cpu_level_5_hint,
R.string.quest_cpu_level_5_hint_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.lockHeadPoseSetting(),
R.string.quest_lock_head_pose,
R.string.quest_lock_head_pose_description
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.unitsPerMeterSetting(),
R.string.quest_units_per_meter,
R.string.quest_units_per_meter_description,
0.1f,
500.0f,
"",
0.1f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.leanBackAngleSetting(),
R.string.quest_lean_back_angle,
R.string.quest_lean_back_angle_description,
-45.0f,
45.0f,
"",
0.1f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.cameraForwardSetting(),
R.string.quest_camera_forward,
R.string.quest_camera_forward_description,
-20.0f,
20.0f,
"",
0.1f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.cameraHeightSetting(),
R.string.quest_camera_height,
R.string.quest_camera_height_description,
-20.0f,
20.0f,
"",
0.1f,
true
)
)
sl.add(
SingleChoiceSetting(
context,
QuestVrSettings.opcodeReplaySetting(),
R.string.quest_opcode_replay,
R.string.quest_opcode_replay_description,
R.array.questOpcodeReplayEntries,
R.array.questOpcodeReplayValues
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.passthroughSetting(),
R.string.quest_passthrough,
R.string.quest_passthrough_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.debugPassthroughSetting(),
R.string.quest_passthrough_debug,
R.string.quest_passthrough_debug_description
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.arBackgroundAlphaSetting(),
R.string.quest_ar_background_alpha,
R.string.quest_ar_background_alpha_description,
0.0f,
1.0f,
"",
0.05f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.vrGammaSetting(),
R.string.quest_vr_gamma,
R.string.quest_vr_gamma_description,
1.0f,
3.0f,
"",
0.1f,
true
)
)
sl.add(HeaderSetting(context, R.string.quest_vr_virtual_screen, 0))
sl.add(
SwitchSetting(
context,
QuestVrSettings.virtualScreenSetting(),
R.string.quest_virtual_screen,
R.string.quest_virtual_screen_description
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.screenDistanceSetting(),
R.string.quest_screen_distance,
R.string.quest_screen_distance_description,
0.5f,
10.0f,
"",
0.1f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.screenSizeSetting(),
R.string.quest_screen_size,
R.string.quest_screen_size_description,
0.5f,
5.0f,
"",
0.1f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.headLockedCurvatureSetting(),
R.string.quest_head_locked_curvature,
R.string.quest_head_locked_curvature_description,
0.0f,
5.0f,
"",
0.01f,
true
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.autoLayerSpreadSetting(),
R.string.quest_auto_layer_spread,
R.string.quest_auto_layer_spread_description
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.layerOffsetSetting(),
R.string.quest_layer_offset,
R.string.quest_layer_offset_description,
0.0001f,
0.01f,
"",
0.0001f,
true
)
)
sl.add(
FloatSliderSetting(
context,
QuestVrSettings.elementDepthSetting(),
R.string.quest_element_depth,
R.string.quest_element_depth_description,
0.0f,
0.1f,
"",
0.0001f,
true
)
)
sl.add(HeaderSetting(context, R.string.quest_vr_presets, 0))
sl.add(
SingleChoiceSetting(
context,
QuestVrSettings.controllerPresetSetting(),
R.string.quest_controller_preset,
R.string.quest_controller_preset_description,
R.array.questControllerPresetEntries,
R.array.questControllerPresetValues
)
)
sl.add(
RunRunnable(
context,
R.string.quest_apply_controller_preset,
R.string.quest_apply_controller_preset_description,
0,
R.string.quest_controller_preset_applied,
false
) {
runQuestSettingsMutation { settings ->
QuestVrSettings.applySelectedControllerPreset(settings)
}
}
)
sl.add(
RunRunnable(
context,
R.string.quest_apply_recommended_defaults,
R.string.quest_apply_recommended_defaults_description,
0,
R.string.quest_recommended_defaults_applied,
false
) {
runQuestSettingsMutation { settings ->
QuestVrSettings.applyRecommendedDefaults(settings)
}
}
)
sl.add(HeaderSetting(context, R.string.quest_vr_debug, 0))
sl.add(
SwitchSetting(
context,
QuestVrSettings.leftHandedSetting(),
R.string.quest_left_handed_wiimote,
R.string.quest_left_handed_wiimote_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.showMirrorSurfaceSetting(),
R.string.quest_show_mirror_surface,
R.string.quest_show_mirror_surface_description
)
)
sl.add(
SwitchSetting(
context,
BooleanSetting.GFX_SHOW_FPS,
R.string.quest_show_perf_hud,
R.string.quest_show_perf_hud_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.removeBarsSetting(),
R.string.quest_remove_cinematic_bars,
R.string.quest_remove_cinematic_bars_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.useVulkanMultiviewSetting(),
R.string.quest_use_vulkan_multiview,
R.string.quest_use_vulkan_multiview_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.androidDirectToHmdSetting(),
R.string.quest_android_direct_to_hmd,
R.string.quest_android_direct_to_hmd_description
)
)
sl.add(
IntSliderSetting(
context,
QuestVrSettings.clearEfbCopiesSetting(),
R.string.quest_clear_efb_copies,
R.string.quest_clear_efb_copies_description,
0,
640,
"",
10
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.dontClearScreenSetting(),
R.string.quest_dont_clear_screen,
R.string.quest_dont_clear_screen_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.disableCpuCullSetting(),
R.string.quest_disable_cpu_culling,
R.string.quest_disable_cpu_culling_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.loadCustomShadersSetting(),
R.string.quest_load_custom_shaders,
R.string.quest_load_custom_shaders_description
)
)
sl.add(
SwitchSetting(
context,
QuestVrSettings.openXrConfigSceneSetting(),
R.string.quest_enable_openxr_config_scene,
R.string.quest_enable_openxr_config_scene_description
)
)
sl.add(
RunRunnable(
context,
R.string.quest_recenter_now,
R.string.quest_recenter_now_description,
0,
0,
true
) { NativeLibrary.RequestOpenXRRecenter() }
)
}
private fun runQuestSettingsMutation(block: (Settings) -> Unit) {
val activeSettings = settings ?: return
block(activeSettings)
activeSettings.saveSettings()
fragmentView.adapter?.notifyAllSettingsChanged()
}
private fun addGcPadSubSettings(sl: ArrayList<SettingsItem>, gcPadNumber: Int, gcPadType: Int) {
when (gcPadType) {
6, 8, 9, 10, 11 -> {
@@ -2499,6 +3238,85 @@ class SettingsFragmentPresenter(
)
}
// Only groups that have at least one action wired in HotkeyDispatcher.cpp are listed here.
// Categories with no wired actions are omitted from the UI entirely so users don't bind
// hotkeys that silently do nothing. See functionalHotkeyControls for per-control filtering.
private val hotkeyCategoryGroups: Map<MenuTag, List<String>> = mapOf(
MenuTag.HOTKEYS_GENERAL to listOf("General", "Emulation Speed"),
MenuTag.HOTKEYS_TAS to listOf("Frame Advance"),
MenuTag.HOTKEYS_VR to listOf("VR"),
MenuTag.HOTKEYS_SAVE_STATES to listOf("Load State", "Save State"),
MenuTag.HOTKEYS_ANDROID to listOf("Android"),
)
// Untranslated control names (C++ ui_name before GetStringT) that are dispatched by
// HotkeyDispatcher.cpp. Controls not in this set are hidden within their group so users
// cannot bind actions that would silently no-op at runtime.
private val functionalHotkeyControls: Set<String> = setOf(
"Return to Main Menu",
"Toggle Pause", "Stop", "Reset", "Take Screenshot",
"Decrease Emulation Speed", "Increase Emulation Speed", "Disable Emulation Speed Limit",
"Frame Advance",
"Toggle OpenXR", "Reset VR Position",
"Decrease Units Per Meter", "Increase Units Per Meter",
"Decrease Lean Back Angle", "Increase Lean Back Angle",
"Toggle Enable Camera Forward", "Decrease Camera Forward", "Increase Camera Forward",
"Toggle Enable Camera Height", "Decrease Camera Height", "Increase Camera Height",
"Toggle Virtual Screen",
"Decrease Screen Distance", "Increase Screen Distance",
"Decrease Screen Size", "Increase Screen Size",
"Decrease Screen Curvature", "Increase Screen Curvature",
"Toggle Don't Clear Screen", "Toggle Force VBI", "Toggle Remove Cinematic Bars",
"Load State Slot 1", "Load State Slot 2", "Load State Slot 3", "Load State Slot 4",
"Load State Slot 5", "Load State Slot 6", "Load State Slot 7", "Load State Slot 8",
"Load State Slot 9", "Load State Slot 10",
"Save State Slot 1", "Save State Slot 2", "Save State Slot 3", "Save State Slot 4",
"Save State Slot 5", "Save State Slot 6", "Save State Slot 7", "Save State Slot 8",
"Save State Slot 9", "Save State Slot 10",
)
private fun addHotkeySettings(sl: ArrayList<SettingsItem>) {
val hotkeys = EmulatedController.getHotkeys()
addControllerMetaSettings(sl, hotkeys)
sl.add(HeaderSetting(context, R.string.hotkey_categories, 0))
sl.add(SubmenuSetting(context, R.string.hotkey_android, MenuTag.HOTKEYS_ANDROID))
sl.add(SubmenuSetting(context, R.string.hotkey_general, MenuTag.HOTKEYS_GENERAL))
sl.add(SubmenuSetting(context, R.string.hotkey_tas, MenuTag.HOTKEYS_TAS))
sl.add(SubmenuSetting(context, R.string.hotkey_vr, MenuTag.HOTKEYS_VR))
sl.add(SubmenuSetting(context, R.string.hotkey_save_states, MenuTag.HOTKEYS_SAVE_STATES))
}
private fun addHotkeyCategorySettings(sl: ArrayList<SettingsItem>, menuTag: MenuTag) {
val hotkeys = EmulatedController.getHotkeys()
val wantedGroupNames = hotkeyCategoryGroups[menuTag] ?: return
val groupCount = hotkeys.getGroupCount()
for (wantedName in wantedGroupNames) {
for (i in 0 until groupCount) {
val group = hotkeys.getGroup(i)
// Match the untranslated `name` (HotkeyManager passes a single string for both
// name and ui_name, so this matches the C++ s_groups_info entry under any locale).
if (!group.getName().equals(wantedName, ignoreCase = true)) continue
// Filter to only controls wired in HotkeyDispatcher.cpp. Controls not in
// functionalHotkeyControls would silently no-op if bound, so we hide them.
val controlCount = group.getControlCount()
val functional = (0 until controlCount)
.map { group.getControl(it) }
.filter { it.getName() in functionalHotkeyControls }
if (functional.isNotEmpty()) {
sl.add(HeaderSetting(group.getUiName(), ""))
for (control in functional) {
sl.add(InputMappingControlSetting(control, hotkeys))
}
}
break
}
}
}
/**
* Adds controller settings that can be set on a per-game basis.
*
@@ -2783,6 +3601,7 @@ class SettingsFragmentPresenter(
companion object {
const val ARG_CONTROLLER_TYPE = "controller_type"
const val ARG_SERIALPORT1_TYPE = "serialport1_type"
const val ARG_REVISION = "revision"
// Value obtained from LogLevel in Common/Logging/Log.h
private fun getLogVerbosityEntries(): Int {
@@ -14,6 +14,7 @@ import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.activities.EmulationActivity
import org.dolphinemu.dolphinemu.databinding.FragmentEmulationBinding
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting
import org.dolphinemu.dolphinemu.features.settings.model.QuestVrSettings
import org.dolphinemu.dolphinemu.features.settings.model.Settings
import org.dolphinemu.dolphinemu.overlay.InputOverlay
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner
@@ -67,6 +68,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
// The new Surface created here will get passed to the native code via onSurfaceChanged.
val surfaceView = binding.surfaceEmulation
surfaceView.holder.addCallback(this)
surfaceView.alpha = if (QuestVrSettings.shouldShowMirrorSurface()) 1.0f else 0.0f
inputOverlay = binding.surfaceInputOverlay
@@ -16,11 +16,13 @@ import androidx.core.view.WindowInsetsCompat
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.tabs.TabLayout
import org.dolphinemu.dolphinemu.NativeLibrary
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter
import org.dolphinemu.dolphinemu.databinding.ActivityMainBinding
import org.dolphinemu.dolphinemu.features.settings.model.IntSetting
import org.dolphinemu.dolphinemu.features.settings.model.NativeConfig
import org.dolphinemu.dolphinemu.features.settings.model.QuestVrSettings
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity
import org.dolphinemu.dolphinemu.fragments.GridOptionDialogFragment
@@ -30,6 +32,7 @@ import org.dolphinemu.dolphinemu.ui.platform.PlatformTab
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization
import org.dolphinemu.dolphinemu.utils.InsetsHelper
import org.dolphinemu.dolphinemu.utils.Log
import org.dolphinemu.dolphinemu.utils.PermissionsHandler
import org.dolphinemu.dolphinemu.utils.StartupHandler
import org.dolphinemu.dolphinemu.utils.ThemeHelper
@@ -43,6 +46,7 @@ class MainActivity : AppCompatActivity(), MainView, OnRefreshListener, ThemeProv
private lateinit var binding: ActivityMainBinding
private lateinit var menu: Menu
private var staleQuestStopRequested = false
override fun onCreate(savedInstanceState: Bundle?) {
installSplashScreen().setKeepOnScreenCondition { !DirectoryInitialization.areDolphinDirectoriesReady() }
@@ -52,6 +56,8 @@ class MainActivity : AppCompatActivity(), MainView, OnRefreshListener, ThemeProv
super.onCreate(savedInstanceState)
stopStaleQuestEmulation()
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
@@ -100,9 +106,18 @@ class MainActivity : AppCompatActivity(), MainView, OnRefreshListener, ThemeProv
.runWithLifecycle(this) { setPlatformTabsAndStartGameFileCacheService() }
}
stopStaleQuestEmulation()
presenter.onResume()
}
private fun stopStaleQuestEmulation() {
if (!staleQuestStopRequested && QuestVrSettings.isQuestBuild() && NativeLibrary.IsRunning()) {
staleQuestStopRequested = true
Log.warning("[MainActivity] Stopping stale Quest emulation before showing main UI.")
NativeLibrary.StopEmulation()
}
}
override fun onStop() {
super.onStop()
if (isChangingConfigurations) {
@@ -24,6 +24,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
@@ -144,8 +145,9 @@ public final class DirectoryInitialization
File sysDirectory = new File(context.getFilesDir(), "Sys");
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String revision = NativeLibrary.GetGitRevision();
if (!preferences.getString("sysDirectoryVersion", "").equals(revision))
String version = getSysDirectoryVersion(context);
boolean isMissingGameSettingsVr = !new File(sysDirectory, "GameSettingsVR").isDirectory();
if (!preferences.getString("sysDirectoryVersion", "").equals(version) || isMissingGameSettingsVr)
{
// There is no extracted Sys directory, or there is a Sys directory from another
// version of Dolphin that might contain outdated files. Let's (re-)extract Sys.
@@ -153,7 +155,7 @@ public final class DirectoryInitialization
copyAssetFolder("Sys", sysDirectory, context);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("sysDirectoryVersion", revision);
editor.putString("sysDirectoryVersion", version);
editor.apply();
}
@@ -175,6 +177,27 @@ public final class DirectoryInitialization
DirectoryInitialization.driverPath = driverExtractedDir.getAbsolutePath();
}
private static String getSysDirectoryVersion(Context context)
{
String[] gameSettingsVrAssets;
try
{
gameSettingsVrAssets = context.getAssets().list("Sys/GameSettingsVR");
}
catch (IOException e)
{
Log.warning("[DirectoryInitialization] Failed to list GameSettingsVR assets: " + e);
gameSettingsVrAssets = new String[0];
}
if (gameSettingsVrAssets == null)
gameSettingsVrAssets = new String[0];
Arrays.sort(gameSettingsVrAssets);
return NativeLibrary.GetGitRevision() + "-GameSettingsVR-" +
Arrays.hashCode(gameSettingsVrAssets);
}
private static void deleteDirectoryRecursively(@NonNull final File file)
{
if (file.isDirectory())
@@ -27,6 +27,10 @@
android:id="@+id/menu_emulation_choose_controller"
android:title="@string/emulation_choose_controller"/>
<item
android:id="@+id/menu_emulation_recenter_vr"
android:title="@string/quest_recenter_now"/>
<item
android:id="@+id/menu_emulation_reset_overlay"
android:title="@string/emulation_touch_overlay_reset"/>
@@ -29,6 +29,10 @@
android:id="@+id/menu_emulation_choose_controller"
android:title="@string/emulation_choose_controller"/>
<item
android:id="@+id/menu_emulation_recenter_vr"
android:title="@string/quest_recenter_now"/>
<item
android:id="@+id/menu_emulation_ir_group"
android:title="@string/emulation_ir_group">
@@ -339,6 +339,26 @@
<item>3</item>
</integer-array>
<string-array name="questControllerPresetEntries">
<item>@string/quest_controller_preset_gamecube</item>
<item>@string/quest_controller_preset_wiimote</item>
</string-array>
<integer-array name="questControllerPresetValues">
<item>0</item>
<item>1</item>
</integer-array>
<string-array name="questOpcodeReplayEntries">
<item>@string/off</item>
<item>@string/quest_opcode_replay_60_to_90</item>
<item>@string/quest_opcode_replay_30_to_90</item>
</string-array>
<integer-array name="questOpcodeReplayValues">
<item>0</item>
<item>1</item>
<item>2</item>
</integer-array>
<!-- Aspect Ratio Preference -->
<string-array name="aspectRatioEntries">
<item>@string/aspect_ratio_auto</item>
@@ -394,11 +414,13 @@
<string-array name="wiimoteTypeEntries">
<item>@string/wiimote_disabled</item>
<item>@string/wiimote_emulated</item>
<item>@string/wiimote_openxr</item>
<item>@string/wiimote_real</item>
</string-array>
<integer-array name="wiimoteTypeValues">
<item>0</item>
<item>1</item>
<item>3</item>
<item>2</item>
</integer-array>
@@ -665,8 +665,8 @@ It can efficiently compress both junk data and encrypted Wii data.
<!-- Misc -->
<string name="enabled">Enabled</string>
<string name="default_values">Default Values</string>
<string name="slider_setting_value">%.0f%2$s</string>
<string name="slider_setting_float_value">%.2f%2$s</string>
<string name="slider_setting_value">%1$.0f%2$s</string>
<string name="slider_setting_float_value">%1$.2f%2$s</string>
<string name="disc_number">Disc %1$d</string>
<string name="replug_gc_adapter">GameCube Adapter couldn\'t be opened. Please re-plug the device.</string>
<string name="disabled_gc_overlay_notice">The selected GameCube controller is set to \"None\"</string>
@@ -783,6 +783,105 @@ It can efficiently compress both junk data and encrypted Wii data.
<string name="stereoscopy_side_by_side">Side-by-Side</string>
<string name="stereoscopy_top_and_bottom">Top-and-Bottom</string>
<string name="stereoscopy_anaglyph">Anaglyph</string>
<string name="stereoscopy_openxr">OpenXR</string>
<string name="openxr_submenu">OpenXR</string>
<string name="quest_vr_settings">Quest VR</string>
<string name="quest_vr_presets">Controller Presets</string>
<string name="quest_vr_runtime">Runtime</string>
<string name="quest_vr_virtual_screen">Virtual Screen</string>
<string name="quest_vr_debug">Comfort and Debug</string>
<string name="quest_enable_openxr">Enable OpenXR on Quest</string>
<string name="quest_enable_openxr_description">Allows Quest launches to switch Dolphin into the OpenXR renderer.</string>
<string name="quest_launch_in_vr">Launch games in VR</string>
<string name="quest_launch_in_vr_description">Starts emulation in the headset instead of keeping games on the 2D Android surface.</string>
<string name="quest_recenter_on_launch">Recenter on launch</string>
<string name="quest_recenter_on_launch_description">Recenters the active OpenXR view as soon as emulation starts.</string>
<string name="quest_force_immediately_present_xfb">Force Immediately Present XFB</string>
<string name="quest_force_immediately_present_xfb_description">Keeps Immediately Present XFB enabled while OpenXR is active for lower latency head tracking.</string>
<string name="quest_force_vbi_from_hmd">Force VBI frequency to 90 Hz in VR</string>
<string name="quest_force_vbi_from_hmd_description">Overrides Dolphin\'s VBI frequency while OpenXR is active to better match a 90 Hz headset.</string>
<string name="quest_cpu_level_5_hint">Request Quest CPU level 5</string>
<string name="quest_cpu_level_5_hint_description">Requests sustained-high OpenXR performance while VR is active. Quest 3/3S may use CPU level 5 with the CPU/GPU trade hint, but the OS can still limit clocks.</string>
<string name="quest_units_per_meter">Units Per Meter</string>
<string name="quest_units_per_meter_description">Sets how many game world units correspond to one real-world meter. Higher values make the world feel smaller, while lower values make it feel larger.</string>
<string name="quest_lean_back_angle">Lean Back Angle</string>
<string name="quest_lean_back_angle_description">Applies a constant pitch offset to the VR camera to compensate for games that feel tilted.</string>
<string name="quest_camera_forward">Camera Forward</string>
<string name="quest_camera_forward_description">Applies a constant forward or backward offset to the VR camera.</string>
<string name="quest_camera_height">Camera Height</string>
<string name="quest_camera_height_description">Applies a constant vertical offset to the VR camera.</string>
<string name="quest_opcode_replay">Opcode Replay</string>
<string name="quest_opcode_replay_description">Submits synthetic OpenXR frames between real emulation frames to better match headset cadence.</string>
<string name="quest_opcode_replay_60_to_90">60 to 90</string>
<string name="quest_opcode_replay_30_to_90">30 to 90</string>
<string name="quest_left_handed_wiimote">Left-handed Wii Remote</string>
<string name="quest_left_handed_wiimote_description">Uses the left Quest controller as the primary OpenXR Wii Remote hand.</string>
<string name="quest_show_mirror_surface">Show 2D mirror surface</string>
<string name="quest_show_mirror_surface_description">Keeps the Android surface visible while OpenXR is active for debugging and capture.</string>
<string name="quest_show_perf_hud">Show performance HUD</string>
<string name="quest_show_perf_hud_description">Displays Dolphin frame rate statistics in the headset mirror.</string>
<string name="quest_passthrough">Enable passthrough</string>
<string name="quest_passthrough_description">Submits the OpenXR layer with transparent background so headset passthrough can show through empty regions.</string>
<string name="quest_passthrough_debug">Passthrough debug tint</string>
<string name="quest_passthrough_debug_description">Uses a solid debug clear color to make passthrough masking issues obvious.</string>
<string name="quest_ar_background_alpha">AR Background Alpha</string>
<string name="quest_ar_background_alpha_description">Controls the alpha used for the OpenXR background when passthrough composition is active.</string>
<string name="quest_lock_head_pose">Lock head pose per frame</string>
<string name="quest_lock_head_pose_description">Keeps pose updates aligned with emulation frame boundaries for more stable stereo output.</string>
<string name="quest_vr_gamma">VR Gamma</string>
<string name="quest_vr_gamma_description">Adjusts gamma correction for the OpenXR eye output.</string>
<string name="quest_virtual_screen">Virtual Screen for 2D Content</string>
<string name="quest_virtual_screen_description">Places menus, FMV, and HUD elements on a floating virtual screen in 3D space.</string>
<string name="quest_screen_distance">Screen Distance</string>
<string name="quest_screen_distance_description">Controls how far the virtual screen sits from the viewer.</string>
<string name="quest_screen_size">Screen Size</string>
<string name="quest_screen_size_description">Controls the size of the virtual screen used for 2D content.</string>
<string name="quest_head_locked_curvature">Head Locked Curvature</string>
<string name="quest_head_locked_curvature_description">Curves head-locked virtual screens so they wrap more around the viewer.</string>
<string name="quest_auto_layer_spread">Auto Layer Spread</string>
<string name="quest_auto_layer_spread_description">Automatically spreads 2D elements across depth layers to reduce Z-fighting.</string>
<string name="quest_layer_offset">Layer Offset</string>
<string name="quest_layer_offset_description">Controls the depth separation between consecutive 2D layers on the virtual screen.</string>
<string name="quest_element_depth">Element Depth</string>
<string name="quest_element_depth_description">Controls the depth range within individual 2D elements on the virtual screen.</string>
<string name="quest_controller_preset">Default controller preset</string>
<string name="quest_controller_preset_description">Selects which stock Quest controller mapping Dolphin reapplies before launch.</string>
<string name="quest_controller_preset_gamecube">GameCube pad</string>
<string name="quest_controller_preset_wiimote">Wii Remote</string>
<string name="quest_apply_controller_preset">Apply selected preset now</string>
<string name="quest_apply_controller_preset_description">Loads the selected Quest controller profile immediately.</string>
<string name="quest_controller_preset_applied">Quest controller preset applied.</string>
<string name="quest_apply_recommended_defaults">Apply recommended Quest defaults</string>
<string name="quest_apply_recommended_defaults_description">Forces Vulkan, conservative rendering defaults, and Quest-safe VR options.</string>
<string name="quest_recommended_defaults_applied">Quest defaults applied.</string>
<string name="quest_remove_cinematic_bars">Remove Cinematic Bars</string>
<string name="quest_remove_cinematic_bars_description">Expands perspective rendering to remove cinematic letterbox bars while in VR.</string>
<string name="quest_use_vulkan_multiview">Vulkan Multiview (Quest perf)</string>
<string name="quest_use_vulkan_multiview_description">Renders both eyes in a single pass via VK_KHR_multiview. Disable to fall back to the geometry-shader stereo path if the multiview path produces broken visuals.</string>
<string name="quest_android_direct_to_hmd">Android direct-to-HMD</string>
<string name="quest_android_direct_to_hmd_description">Skips the normal Android backbuffer present and submits the XFB directly to OpenXR. Faster in some scenes, but can freeze or black-screen games that stop producing XFB frames during transitions.</string>
<string name="quest_clear_efb_copies">Clear EFB Copies</string>
<string name="quest_clear_efb_copies_description">Clears large EFB copy textures to transparent at or above the selected native width. Set 0 to disable.</string>
<string name="quest_dont_clear_screen">Don\'t Clear Screen</string>
<string name="quest_dont_clear_screen_description">Prevents clearing the OpenXR eye framebuffers before rendering each frame.</string>
<string name="quest_disable_cpu_culling">Disable CPU Culling in VR</string>
<string name="quest_disable_cpu_culling_description">Disables Dolphin\'s CPU-side primitive culling while OpenXR is active.</string>
<string name="quest_load_custom_shaders">Load Custom Shaders</string>
<string name="quest_load_custom_shaders_description">Loads custom shader replacements from the game\'s shader override directory.</string>
<string name="quest_enable_openxr_config_scene">Enable OpenXR Config Scene</string>
<string name="quest_enable_openxr_config_scene_description">Starts a temporary OpenXR scene while configuring controller bindings outside emulation.</string>
<string name="quest_recenter_now">Recenter VR view now</string>
<string name="quest_recenter_now_description">Requests an OpenXR recenter while emulation is running.</string>
<string name="quest_vr_config">VR Config</string>
<string name="quest_vr_config_description">Merged default and user GameSettingsVR profile values for this game. Editing writes to the user profile only.</string>
<string name="quest_no_stored_vr_config">No stored VR config found for this game.</string>
<string name="quest_hide_objects">Hide Objects</string>
<string name="quest_hide_objects_description">Enable or disable stored Hide Object codes for this game.</string>
<string name="quest_shader_overrides">Shader Overrides</string>
<string name="quest_shader_overrides_description">Enable or disable stored Shader Overrides for this game.</string>
<string name="quest_elements_group_overrides">Elements Group Overrides</string>
<string name="quest_elements_group_overrides_description">Enable or disable stored Elements Group Overrides for this game.</string>
<string name="quest_no_stored_overrides">No stored overrides found for this game.</string>
<!-- Aspect Ratio Preference -->
<string name="aspect_ratio_auto">Auto</string>
@@ -819,8 +918,26 @@ It can efficiently compress both junk data and encrypted Wii data.
<!-- Wiimote Types -->
<string name="wiimote_disabled">None</string>
<string name="wiimote_emulated">Emulated Wii Remote</string>
<string name="wiimote_openxr">OpenXR Wii Remote</string>
<string name="wiimote_real">Real Wii Remote (DolphinBar required)</string>
<!-- Hotkeys -->
<string name="hotkey_settings">Hotkey Settings</string>
<string name="hotkey_categories">Categories</string>
<string name="hotkey_general">General</string>
<string name="hotkey_tas">TAS Tools</string>
<string name="hotkey_debugging">Debugging</string>
<string name="hotkey_wii">Wii</string>
<string name="hotkey_controller_profile">Controller Profiles</string>
<string name="hotkey_graphics">Graphics</string>
<string name="hotkey_vr">VR</string>
<string name="hotkey_3d">Stereoscopic 3D</string>
<string name="hotkey_save_states">Save States</string>
<string name="hotkey_states_other">Other Save State Hotkeys</string>
<string name="hotkey_gba">GBA</string>
<string name="hotkey_usb">USB Emulation</string>
<string name="hotkey_android">Android / Quest</string>
<!-- Gamepad Controls -->
<string name="gamepad_start">Start</string>
<string name="gamepad_d_pad">D-Pad</string>
@@ -0,0 +1,57 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="org.khronos.openxr.permission.OPENXR_SYSTEM" />
<queries>
<provider android:authorities="org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker" />
<intent>
<action android:name="org.khronos.openxr.OpenXRRuntimeService" />
</intent>
<intent>
<action android:name="org.khronos.openxr.OpenXRApiLayerService" />
</intent>
</queries>
<uses-feature
android:name="android.hardware.vr.headtracking"
android:required="true"
android:version="1" />
<uses-feature
android:name="android.software.xr.api.openxr"
android:required="true" />
<application>
<uses-native-library
android:name="libopenxr.google.so"
android:required="false" />
<meta-data
android:name="com.oculus.supportedDevices"
android:value="${questSupportedDevices}" />
<meta-data
android:name="com.oculus.vr.focusaware"
android:value="true" />
<meta-data
android:name="com.oculus.trade_cpu_for_gpu_amount"
android:value="-1" />
<activity
android:name=".activities.EmulationActivity"
android:theme="@style/Theme.Dolphin.EmulationVR"
android:launchMode="singleTask"
android:resizeableActivity="false"
android:exported="true"
tools:node="merge"
tools:replace="android:theme,android:exported">
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="com.oculus.intent.category.VR" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="stereoscopyEntries">
<item>@string/stereoscopy_off</item>
<item>@string/stereoscopy_side_by_side</item>
<item>@string/stereoscopy_top_and_bottom</item>
<item>@string/stereoscopy_anaglyph</item>
<item>@string/stereoscopy_openxr</item>
</string-array>
<integer-array name="stereoscopyValues">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>6</item>
</integer-array>
</resources>
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Dolphin.EmulationVR" parent="Theme.Dolphin.Main">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:statusBarColor">@android:color/black</item>
<item name="android:navigationBarColor">@android:color/black</item>
<item name="android:windowContentTransitions">false</item>
</style>
</resources>
+94
View File
@@ -0,0 +1,94 @@
param(
[string]$Keystore = $env:DOLPHIN_ANDROID_KEYSTORE,
[string]$StorePass = $env:DOLPHIN_ANDROID_STOREPASS,
[string]$KeyAlias = $env:DOLPHIN_ANDROID_KEYALIAS,
[string]$KeyPass = $env:DOLPHIN_ANDROID_KEYPASS
)
$ErrorActionPreference = "Stop"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$javaHome = "C:\Program Files\Java\jdk-17"
$androidRoot = "C:\Users\Christophe\AppData\Local\Android"
$androidHome = Join-Path $androidRoot "Sdk"
$ndkHome = Join-Path $androidRoot "android-ndk-r29"
$vsCmakeBin = "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
$vsNinjaBin = "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja"
if (-not (Test-Path (Join-Path $javaHome "bin\java.exe"))) {
throw "JDK 17 not found at $javaHome"
}
if (-not (Test-Path $androidHome)) {
throw "Android SDK root not found at $androidHome"
}
if (-not (Test-Path $ndkHome)) {
throw "Android NDK not found at $ndkHome"
}
$signingValues = @{
keystore = if ($Keystore) { $Keystore } else { $env:ORG_GRADLE_PROJECT_keystore }
storepass = if ($StorePass) { $StorePass } else { $env:ORG_GRADLE_PROJECT_storepass }
keyalias = if ($KeyAlias) { $KeyAlias } else { $env:ORG_GRADLE_PROJECT_keyalias }
keypass = if ($KeyPass) { $KeyPass } else { $env:ORG_GRADLE_PROJECT_keypass }
}
$missingSigningKeys = $signingValues.GetEnumerator() |
Where-Object { [string]::IsNullOrWhiteSpace($_.Value) } |
Select-Object -ExpandProperty Key
if ($missingSigningKeys.Count -gt 0) {
throw @"
Missing release signing settings: $($missingSigningKeys -join ", ")
Provide them either as parameters:
.\build-quest-release.ps1 -Keystore C:\path\release.jks -StorePass ... -KeyAlias ... -KeyPass ...
Or as environment variables:
DOLPHIN_ANDROID_KEYSTORE
DOLPHIN_ANDROID_STOREPASS
DOLPHIN_ANDROID_KEYALIAS
DOLPHIN_ANDROID_KEYPASS
"@
}
$resolvedKeystore = $signingValues.keystore
if (-not [System.IO.Path]::IsPathRooted($resolvedKeystore)) {
$resolvedKeystore = Join-Path $scriptDir $resolvedKeystore
}
if (-not (Test-Path $resolvedKeystore)) {
throw "Release keystore not found at $resolvedKeystore"
}
$signingValues.keystore = (Resolve-Path $resolvedKeystore).Path
$env:JAVA_HOME = $javaHome
$env:ANDROID_HOME = $androidHome
$env:ANDROID_SDK_ROOT = $androidHome
$env:ANDROID_NDK_HOME = $ndkHome
$pathPrefixes = @("$javaHome\bin", "$androidHome\platform-tools")
if (Test-Path (Join-Path $vsCmakeBin "cmake.exe")) {
$pathPrefixes += $vsCmakeBin
}
if (Test-Path (Join-Path $vsNinjaBin "ninja.exe")) {
$pathPrefixes += $vsNinjaBin
}
$env:Path = (($pathPrefixes -join ";") + ";" + $env:Path)
Push-Location $scriptDir
try {
$oldGradleSigningEnv = @{}
foreach ($key in $signingValues.Keys) {
$envName = "ORG_GRADLE_PROJECT_$key"
$oldGradleSigningEnv[$envName] = [Environment]::GetEnvironmentVariable($envName, "Process")
[Environment]::SetEnvironmentVariable($envName, $signingValues[$key], "Process")
}
& ".\gradlew.bat" "app:assembleQuestRelease"
}
finally {
foreach ($entry in $oldGradleSigningEnv.GetEnumerator()) {
[Environment]::SetEnvironmentVariable($entry.Key, $entry.Value, "Process")
}
Pop-Location
}
+42
View File
@@ -0,0 +1,42 @@
$ErrorActionPreference = "Stop"
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$javaHome = "C:\Program Files\Java\jdk-17"
$androidRoot = "C:\Users\Christophe\AppData\Local\Android"
$androidHome = Join-Path $androidRoot "Sdk"
$ndkHome = Join-Path $androidRoot "android-ndk-r29"
$vsCmakeBin = "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin"
$vsNinjaBin = "C:\Program Files\Microsoft Visual Studio\2022\Community\CommonExtensions\Microsoft\CMake\Ninja"
if (-not (Test-Path (Join-Path $javaHome "bin\java.exe"))) {
throw "JDK 17 not found at $javaHome"
}
if (-not (Test-Path $androidHome)) {
throw "Android SDK root not found at $androidHome"
}
if (-not (Test-Path $ndkHome)) {
throw "Android NDK not found at $ndkHome"
}
$env:JAVA_HOME = $javaHome
$env:ANDROID_HOME = $androidHome
$env:ANDROID_SDK_ROOT = $androidHome
$env:ANDROID_NDK_HOME = $ndkHome
$pathPrefixes = @("$javaHome\bin", "$androidHome\platform-tools")
if (Test-Path (Join-Path $vsCmakeBin "cmake.exe")) {
$pathPrefixes += $vsCmakeBin
}
if (Test-Path (Join-Path $vsNinjaBin "ninja.exe")) {
$pathPrefixes += $vsNinjaBin
}
$env:Path = (($pathPrefixes -join ";") + ";" + $env:Path)
Push-Location $scriptDir
try {
& ".\gradlew.bat" "app:assembleQuestDebug"
}
finally {
Pop-Location
}
+3
View File
@@ -27,6 +27,8 @@ add_library(main SHARED
Input/CoreDevice.h
Input/EmulatedController.cpp
Input/EmulatedController.h
Input/HotkeyDispatcher.cpp
Input/HotkeyDispatcher.h
Input/InputDetector.cpp
Input/InputOverrider.cpp
Input/MappingCommon.cpp
@@ -62,6 +64,7 @@ PRIVATE
${CMAKE_SOURCE_DIR}/Externals/VulkanMemoryAllocator/include
)
file(GLOB_RECURSE android_sys_assets CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/Data/Sys/*")
file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/Source/Android/app/src/main/assets/)
file(REMOVE_RECURSE ${CMAKE_SOURCE_DIR}/Source/Android/app/src/main/assets/Sys/)
file(COPY ${CMAKE_SOURCE_DIR}/Data/Sys DESTINATION ${CMAKE_SOURCE_DIR}/Source/Android/app/src/main/assets/)
+7
View File
@@ -31,6 +31,13 @@ jobject ControlToJava(JNIEnv* env, ControllerEmu::Control* control)
extern "C" {
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_Control_getName(JNIEnv* env,
jobject obj)
{
return ToJString(env, GetPointer(env, obj)->ui_name);
}
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_Control_getUiName(JNIEnv* env,
jobject obj)
@@ -37,6 +37,13 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_g
return ToJString(env, Common::GetStringT(GetPointer(env, obj)->ui_name.c_str()));
}
JNIEXPORT jstring JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_getName(
JNIEnv* env, jobject obj)
{
return ToJString(env, GetPointer(env, obj)->name);
}
JNIEXPORT jint JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_ControlGroup_getGroupType(
JNIEnv* env, jobject obj)
@@ -9,6 +9,7 @@
#include "Core/HW/GCPad.h"
#include "Core/HW/Wiimote.h"
#include "Core/HW/WiimoteEmu/WiimoteEmu.h"
#include "Core/HotkeyManager.h"
#include "InputCommon/ControllerEmu/ControlGroup/Attachments.h"
#include "InputCommon/ControllerEmu/ControllerEmu.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
@@ -191,6 +192,13 @@ Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedContro
return EmulatedControllerToJava(env, Wiimote::GetConfig()->GetController(controller_index));
}
JNIEXPORT jobject JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getHotkeys(
JNIEnv* env, jclass)
{
return EmulatedControllerToJava(env, HotkeyManagerEmu::GetConfig()->GetController(0));
}
JNIEXPORT jobject JNICALL
Java_org_dolphinemu_dolphinemu_features_input_model_controlleremu_EmulatedController_getWiimoteAttachment(
JNIEnv* env, jclass, jint controller_index, jint attachment_index)
@@ -0,0 +1,377 @@
// Copyright 2026 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "jni/Input/HotkeyDispatcher.h"
#include <algorithm>
#include <sys/resource.h>
#include <unistd.h>
#include "Common/Config/Config.h"
#include "Common/Thread.h"
#include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "Core/Core.h"
#include "Core/HW/ProcessorInterface.h"
#include "Core/HotkeyManager.h"
#include "Core/State.h"
#include "Core/System.h"
#include "InputCommon/ControlReference/ControlReference.h"
#include "InputCommon/ControllerInterface/ControllerInterface.h"
#include "jni/Host.h"
#ifdef ENABLE_VR
#include "VideoCommon/VR/OpenXRManager.h"
#endif
namespace
{
constexpr int kPollPeriodMs = 11; // ~90 Hz, matches Quest 3 refresh — see plan §"Threading model".
constexpr int kBackgroundNice = 10;
// Number of consecutive 11 ms ticks HK_ANDROID_RETURN_TO_MAIN_MENU must be held before firing
// (~3 seconds, same threshold as the old hard-coded OpenXRManager long-press).
constexpr int kReturnMenuHoldTicks = 3000 / kPollPeriodMs;
bool IsHotkey(int id, bool held = false)
{
return HotkeyManagerEmu::IsPressed(id, held);
}
} // namespace
HotkeyDispatcher::~HotkeyDispatcher()
{
Stop();
}
void HotkeyDispatcher::Start(StopRequestCallback on_stop_requested)
{
if (m_thread.joinable())
return;
m_on_stop_requested = std::move(on_stop_requested);
m_stop_requested.Clear();
// HotkeyManagerEmu starts disabled on Android (PC's HotkeyScheduler ctor enables it,
// but no equivalent runs here). Without this, IsPressed() short-circuits and the loop
// is a silent no-op — flagged in the design review.
HotkeyManagerEmu::Enable(true);
m_thread = std::thread(&HotkeyDispatcher::Run, this);
}
void HotkeyDispatcher::Stop()
{
if (!m_thread.joinable())
return;
m_stop_requested.Set();
m_thread.join();
m_on_stop_requested = {};
}
void HotkeyDispatcher::Run()
{
Common::SetCurrentThreadName("HotkeyDispatcher");
// PRIO_PROCESS + tid is the Linux/Android idiom for a per-thread nice value (despite
// PRIO_PROCESS's name). Best-effort — failure is benign, the thread just runs at the
// default priority.
setpriority(PRIO_PROCESS, gettid(), kBackgroundNice);
Core::System& system = Core::System::GetInstance();
while (!m_stop_requested.IsSet())
{
Common::SleepCurrentThread(kPollPeriodMs);
g_controller_interface.SetCurrentInputChannel(ciface::InputChannel::Host);
g_controller_interface.UpdateInput();
if (!HotkeyManagerEmu::IsEnabled())
continue;
const Core::State state = Core::GetState(system);
if (state == Core::State::Stopping || state == Core::State::Uninitialized)
continue;
// Fill the rising-edge state for the next IsPressed() calls. PC always passes
// require_focus=true here; on Android we have no window-focus concept while the
// EmulationActivity is foreground, so we always allow input.
Core::UpdateInputGate(true);
HotkeyManagerEmu::GetStatus(false);
ControlReference::SetInputGate(true);
HotkeyManagerEmu::GetStatus(true);
// ---------- Core emulation ----------
if (IsHotkey(HK_PLAY_PAUSE))
{
HostThreadLock guard;
const Core::State current = Core::GetState(system);
if (current == Core::State::Running)
Core::SetState(system, Core::State::Paused);
else if (current == Core::State::Paused)
Core::SetState(system, Core::State::Running);
}
if (IsHotkey(HK_STOP))
{
{
HostThreadLock guard;
Core::Stop(system);
}
// Wake the Run() wait loop so it observes !Core::IsRunning and exits, which then
// triggers finishEmulationActivity() (and the previous task's MainActivity-revival
// fix). The next loop iteration will see the resulting state == Stopping and bail
// out of the dispatch block, but we still want to keep polling until Stop() is
// called on us so that no spurious actions fire mid-shutdown.
if (m_on_stop_requested)
m_on_stop_requested();
continue;
}
if (IsHotkey(HK_RESET))
{
HostThreadLock guard;
system.GetProcessorInterface().ResetButton_Tap();
}
if (IsHotkey(HK_SCREENSHOT))
{
HostThreadLock guard;
Core::SaveScreenShot();
}
if (IsHotkey(HK_FRAME_ADVANCE))
{
HostThreadLock guard;
Core::DoFrameStep(system);
}
// Held hotkey: throttle is disabled while the bound input is held.
{
const bool throttle_held = IsHotkey(HK_TOGGLE_THROTTLE, true);
Core::SetIsThrottlerTempDisabled(throttle_held);
}
if (IsHotkey(HK_DECREASE_EMULATION_SPEED))
{
auto speed = Config::Get(Config::MAIN_EMULATION_SPEED) - 0.1f;
if (speed > 0.0f)
{
if (speed >= 0.95f && speed <= 1.05f)
speed = 1.0f;
Config::SetCurrent(Config::MAIN_EMULATION_SPEED, speed);
}
}
if (IsHotkey(HK_INCREASE_EMULATION_SPEED))
{
auto speed = Config::Get(Config::MAIN_EMULATION_SPEED) + 0.1f;
if (speed >= 0.95f && speed <= 1.05f)
speed = 1.0f;
Config::SetCurrent(Config::MAIN_EMULATION_SPEED, speed);
}
// Save/Load state slots 1..10. The HK_*_STATE_SLOT_1 hotkey is slot 1 (1-indexed)
// but State::Save/Load take 0-based slot numbers.
for (int slot = 1; slot <= 10; ++slot)
{
if (IsHotkey(HK_LOAD_STATE_SLOT_1 + (slot - 1)))
{
HostThreadLock guard;
State::Load(system, slot);
}
if (IsHotkey(HK_SAVE_STATE_SLOT_1 + (slot - 1)))
{
HostThreadLock guard;
State::Save(system, slot);
}
}
// ---------- VR ----------
if (IsHotkey(HK_VR_TOGGLE_OPENXR))
{
Config::SetCurrent(Config::GFX_VR_ENABLE_OPENXR,
!Config::Get(Config::GFX_VR_ENABLE_OPENXR));
}
#ifdef ENABLE_VR
if (IsHotkey(HK_VR_RESET_POSITION))
{
if (VR::g_openxr)
VR::g_openxr->RequestRecenter();
}
#endif
if (IsHotkey(HK_VR_DECREASE_UNITS_PER_METER))
{
const float v = std::max(Config::GFX_VR_UNITS_PER_METER_MIN,
Config::Get(Config::GFX_VR_UNITS_PER_METER) -
Config::GFX_VR_UNITS_PER_METER_STEP);
Config::SetCurrent(Config::GFX_VR_UNITS_PER_METER, v);
}
if (IsHotkey(HK_VR_INCREASE_UNITS_PER_METER))
{
const float v = std::min(Config::GFX_VR_UNITS_PER_METER_MAX,
Config::Get(Config::GFX_VR_UNITS_PER_METER) +
Config::GFX_VR_UNITS_PER_METER_STEP);
Config::SetCurrent(Config::GFX_VR_UNITS_PER_METER, v);
}
if (IsHotkey(HK_VR_DECREASE_LEAN_BACK_ANGLE))
{
const float v = std::max(Config::GFX_VR_LEAN_BACK_ANGLE_MIN,
Config::Get(Config::GFX_VR_LEAN_BACK_ANGLE) -
Config::GFX_VR_LEAN_BACK_ANGLE_STEP);
Config::SetCurrent(Config::GFX_VR_LEAN_BACK_ANGLE, v);
}
if (IsHotkey(HK_VR_INCREASE_LEAN_BACK_ANGLE))
{
const float v = std::min(Config::GFX_VR_LEAN_BACK_ANGLE_MAX,
Config::Get(Config::GFX_VR_LEAN_BACK_ANGLE) +
Config::GFX_VR_LEAN_BACK_ANGLE_STEP);
Config::SetCurrent(Config::GFX_VR_LEAN_BACK_ANGLE, v);
}
if (IsHotkey(HK_VR_TOGGLE_ENABLE_CAMERA_FORWARD))
{
Config::SetCurrent(Config::GFX_VR_ENABLE_CAMERA_FORWARD,
!Config::Get(Config::GFX_VR_ENABLE_CAMERA_FORWARD));
}
if (IsHotkey(HK_VR_DECREASE_CAMERA_FORWARD))
{
const float v = std::max(Config::GFX_VR_CAMERA_FORWARD_MIN,
Config::Get(Config::GFX_VR_CAMERA_FORWARD) -
Config::GFX_VR_CAMERA_FORWARD_STEP);
Config::SetCurrent(Config::GFX_VR_CAMERA_FORWARD, v);
}
if (IsHotkey(HK_VR_INCREASE_CAMERA_FORWARD))
{
const float v = std::min(Config::GFX_VR_CAMERA_FORWARD_MAX,
Config::Get(Config::GFX_VR_CAMERA_FORWARD) +
Config::GFX_VR_CAMERA_FORWARD_STEP);
Config::SetCurrent(Config::GFX_VR_CAMERA_FORWARD, v);
}
if (IsHotkey(HK_VR_TOGGLE_ENABLE_CAMERA_HEIGHT))
{
Config::SetCurrent(Config::GFX_VR_ENABLE_CAMERA_HEIGHT,
!Config::Get(Config::GFX_VR_ENABLE_CAMERA_HEIGHT));
}
if (IsHotkey(HK_VR_DECREASE_CAMERA_HEIGHT))
{
const float v = std::max(Config::GFX_VR_CAMERA_HEIGHT_MIN,
Config::Get(Config::GFX_VR_CAMERA_HEIGHT) -
Config::GFX_VR_CAMERA_HEIGHT_STEP);
Config::SetCurrent(Config::GFX_VR_CAMERA_HEIGHT, v);
}
if (IsHotkey(HK_VR_INCREASE_CAMERA_HEIGHT))
{
const float v = std::min(Config::GFX_VR_CAMERA_HEIGHT_MAX,
Config::Get(Config::GFX_VR_CAMERA_HEIGHT) +
Config::GFX_VR_CAMERA_HEIGHT_STEP);
Config::SetCurrent(Config::GFX_VR_CAMERA_HEIGHT, v);
}
if (IsHotkey(HK_VR_TOGGLE_VIRTUAL_SCREEN))
{
Config::SetCurrent(Config::GFX_VR_VIRTUAL_SCREEN,
!Config::Get(Config::GFX_VR_VIRTUAL_SCREEN));
}
if (IsHotkey(HK_VR_DECREASE_SCREEN_DISTANCE))
{
const float v = std::max(Config::GFX_VR_SCREEN_DISTANCE_MIN,
Config::Get(Config::GFX_VR_SCREEN_DISTANCE) -
Config::GFX_VR_SCREEN_DISTANCE_STEP);
Config::SetCurrent(Config::GFX_VR_SCREEN_DISTANCE, v);
}
if (IsHotkey(HK_VR_INCREASE_SCREEN_DISTANCE))
{
const float v = std::min(Config::GFX_VR_SCREEN_DISTANCE_MAX,
Config::Get(Config::GFX_VR_SCREEN_DISTANCE) +
Config::GFX_VR_SCREEN_DISTANCE_STEP);
Config::SetCurrent(Config::GFX_VR_SCREEN_DISTANCE, v);
}
if (IsHotkey(HK_VR_DECREASE_SCREEN_SIZE))
{
const float v = std::max(Config::GFX_VR_SCREEN_SIZE_MIN,
Config::Get(Config::GFX_VR_SCREEN_SIZE) -
Config::GFX_VR_SCREEN_SIZE_STEP);
Config::SetCurrent(Config::GFX_VR_SCREEN_SIZE, v);
}
if (IsHotkey(HK_VR_INCREASE_SCREEN_SIZE))
{
const float v = std::min(Config::GFX_VR_SCREEN_SIZE_MAX,
Config::Get(Config::GFX_VR_SCREEN_SIZE) +
Config::GFX_VR_SCREEN_SIZE_STEP);
Config::SetCurrent(Config::GFX_VR_SCREEN_SIZE, v);
}
if (IsHotkey(HK_VR_DECREASE_SCREEN_CURVATURE))
{
const float v = std::max(Config::GFX_VR_HEAD_LOCKED_CURVATURE_MIN,
Config::Get(Config::GFX_VR_HEAD_LOCKED_CURVATURE) -
Config::GFX_VR_HEAD_LOCKED_CURVATURE_STEP);
Config::SetCurrent(Config::GFX_VR_HEAD_LOCKED_CURVATURE, v);
}
if (IsHotkey(HK_VR_INCREASE_SCREEN_CURVATURE))
{
const float v = std::min(Config::GFX_VR_HEAD_LOCKED_CURVATURE_MAX,
Config::Get(Config::GFX_VR_HEAD_LOCKED_CURVATURE) +
Config::GFX_VR_HEAD_LOCKED_CURVATURE_STEP);
Config::SetCurrent(Config::GFX_VR_HEAD_LOCKED_CURVATURE, v);
}
if (IsHotkey(HK_VR_TOGGLE_DONT_CLEAR_SCREEN))
{
Config::SetCurrent(Config::GFX_VR_DONT_CLEAR_SCREEN,
!Config::Get(Config::GFX_VR_DONT_CLEAR_SCREEN));
}
if (IsHotkey(HK_VR_TOGGLE_FORCE_VBI))
{
const int current_value =
Config::NormalizeVRForcedVBIFrequency(Config::Get(Config::GFX_VR_FORCED_VBI_FREQUENCY));
Config::SetCurrent(Config::GFX_VR_AUTO_VBI_FROM_HMD, false);
Config::SetCurrent(Config::GFX_VR_FORCED_VBI_FREQUENCY,
current_value == Config::GFX_VR_FORCED_VBI_FREQUENCY_OFF ?
Config::GFX_VR_FORCED_VBI_FREQUENCY_AUTO :
Config::GFX_VR_FORCED_VBI_FREQUENCY_OFF);
}
if (IsHotkey(HK_VR_TOGGLE_REMOVE_CINEMATIC_BARS))
{
Config::SetCurrent(Config::GFX_VR_REMOVE_BARS,
!Config::Get(Config::GFX_VR_REMOVE_BARS));
}
// ---------- Android navigation ----------
// HK_ANDROID_RETURN_TO_MAIN_MENU requires a sustained 3-second hold before firing.
// This prevents accidental exits on shared inputs (e.g. a shoulder button also used for
// in-game actions). Once the threshold is reached we fire exactly once; the tick counter
// is reset to a saturated value so it doesn't re-fire until the button is released.
if (IsHotkey(HK_ANDROID_RETURN_TO_MAIN_MENU, true))
{
if (m_return_menu_hold_ticks < kReturnMenuHoldTicks)
++m_return_menu_hold_ticks;
if (m_return_menu_hold_ticks == kReturnMenuHoldTicks)
{
{
HostThreadLock guard;
Core::Stop(system);
}
if (m_on_stop_requested)
m_on_stop_requested();
m_return_menu_hold_ticks = kReturnMenuHoldTicks + 1;
continue;
}
}
else
{
m_return_menu_hold_ticks = 0;
}
}
}
@@ -0,0 +1,52 @@
// Copyright 2026 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include <functional>
#include <thread>
#include "Common/Flag.h"
// Polls HotkeyManagerEmu on a dedicated low-priority background thread and dispatches
// fired hotkeys to the corresponding Core/Config/State/OpenXR APIs. Mirrors PC's
// Source/Core/DolphinQt/HotkeyScheduler but with no Qt dependency and a smaller, Android-
// relevant action set (see HotkeyDispatcher.cpp for the dispatch table).
//
// Lifetime: Start() must be called once after the boot has settled (see MainAndroid::Run).
// Stop() must be called before Core::Shutdown so the thread isn't reading a torn-down
// g_controller_interface.
class HotkeyDispatcher
{
public:
// Called from the dispatcher thread when HK_STOP fires. The implementation is
// expected to wake the main Run() loop (e.g. by setting s_update_main_frame_event)
// so it observes the Core::Stop and exits cleanly. Kept as a callback so this header
// doesn't reach into MainAndroid's internal symbols.
using StopRequestCallback = std::function<void()>;
HotkeyDispatcher() = default;
~HotkeyDispatcher();
HotkeyDispatcher(const HotkeyDispatcher&) = delete;
HotkeyDispatcher& operator=(const HotkeyDispatcher&) = delete;
// No-op if already running.
void Start(StopRequestCallback on_stop_requested);
// Signals the thread to exit and joins. Safe to call when not running.
void Stop();
bool IsRunning() const { return m_thread.joinable(); }
private:
void Run();
std::thread m_thread;
Common::Flag m_stop_requested;
StopRequestCallback m_on_stop_requested;
// Counts consecutive poll ticks that HK_ANDROID_RETURN_TO_MAIN_MENU has been held.
// Fires once the threshold (~3 s) is reached, then resets to prevent re-firing.
int m_return_menu_hold_ticks = 0;
};
Loaded 100 of 3261 files, more files were not shown because too many files have changed in this diff. Show more