VR Expansion Plugin

Since updating to 5.6 I’m now getting errors with the Steam friends list. This all worked perfectly in 5.5 previously. This causes attempts to join a created session to fail as this error happens as soon as the build is launched.
Please see the following critical error from the logs:

[2025.06.12-23.07.15:087][910]LogWindows: Error: === Critical error: ===
[2025.06.12-23.07.15:087][910]LogWindows: Error:
[2025.06.12-23.07.15:087][910]LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xffffffffffffffff
[2025.06.12-23.07.15:087][910]LogWindows: Error:
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff8306b156d VCRUNTIME140.dll!UnknownFunction
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff775c98ec6 Analog.exe!UGetFriendsCallbackProxy::OnReadFriendsListCompleted() [H:\Analog 5.6\Plugins\AdvancedSessions\Source\AdvancedSessions\Private\GetFriendsCallbackProxy.cpp:98]
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff775c987c8 Analog.exe!TBaseUObjectMethodDelegateInstance<0,UGetFriendsCallbackProxy,void __cdecl(int,bool,FString const &,FString const &),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [G:\UE_5.6\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:689]
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff777adb2ff Analog.exe!FOnlineAsyncTaskSteamReadFriendsList::TriggerDelegates()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff775add99a Analog.exe!FOnlineAsyncTaskManager::GameTick()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff777ad7e95 Analog.exe!FOnlineSubsystemSteam::Tick()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff76d44dae5 Analog.exe!TBaseRawMethodDelegateInstance<0,FTSTickerObjectBase,bool __cdecl(float),FDefaultDelegateUserPolicy>::Execute()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff76d430cb5 Analog.exe!FFileCache::PushCompletedRequest'::12’::<lambda_1>::operator()()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff76d480329 Analog.exe!FTSTicker::Tick()
[2025.06.12-23.07.15:087][910]LogWindows: Error: [Callstack] 0x00007ff775a34569 Analog.exe!FEngineLoop::Tick()

Here are some additional notes from AI analization: 
The `Analog.log` file indicates that your Unreal Engine 5.6.0-43139311 project (`Analog_Game`) crashed at 01:24:40 CDT on June 14, 2025, shortly after loading the `Level_Multiplayer_Lobby` map. The crash is due to an `EXCEPTION_ACCESS_VIOLATION` (reading address `0xffffffffffffffff`), which suggests a null pointer dereference or memory access issue. Below are the key findings and steps to address the issue.

### Key Observations

#### 1. Crash Details
- **Error**: `Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xffffffffffffffff`
- **Callstack**:
  - Starts in `VCRUNTIME140.dll` (likely a C++ runtime issue).
  - Traces to `UGetFriendsCallbackProxy::OnReadFriendsListCompleted` in `GetFriendsCallbackProxy.cpp:98` (part of the `AdvancedSessions` plugin).
  - Involves `FOnlineAsyncTaskSteamReadFriendsList::TriggerDelegates` and `FOnlineSubsystemSteam::Tick`, indicating a Steam API-related failure.
- **Cause**: The crash likely occurs when the Steam subsystem attempts to process a friends list request, but the data or callback context is invalid (e.g., null pointer or uninitialized object).

#### 2. Preceding Events
- **Map Transition**: The game transitioned from `Level_MainMenu` to `Level_Multiplayer_Lobby` at 01:24:29, taking 0.077558 seconds to load.
- **Voice Processing**: `LogOnlineVoice: OSS: StartLocalProcessing(0) returned 0xFFFFFFFF` and invalid user errors (`RegisterLocalTalker`) suggest issues with voice chat initialization, possibly related to the Steam subsystem.
- **PSO Hitching**: Multiple `LogD3D12RHI: Waited for PSO creation` messages (up to 400ms delays) indicate shader compilation bottlenecks, which might stress the system but aren’t the direct crash cause.
- **Memory Usage**: Peak process memory is 3.3 GB physical and 9.6 GB virtual, with no immediate out-of-memory indication.

#### 3. Steam Integration
- `LogOnline: Warning: STEAM: Failed to obtain steam user stats` earlier in the log suggests incomplete Steam stats setup.
- The crash occurs during a Steam friends list operation, likely triggered by the multiplayer lobby’s session creation (`LogOnlineSession: OSS: Session creation completed`).

#### 4. Missing DLLs
- Warnings for `VtuneApi.dll`, `VtuneApi32e.dll`, `WinPixGpuCapturer.dll`, and `aqProf.dll` (GetLastError=126) are present but unrelated to the crash, as they’re optional profiling tools.

### Likely Cause
The crash is tied to the `AdvancedSessions` plugin’s `GetFriendsCallbackProxy`, which interacts with the Steam API. An invalid user ID, uninitialized session, or misconfigured Steam callback could cause the access violation. This is supported by the `Invalid user specified in RegisterLocalTalker` errors and the timing with session setup.

### Steps to Resolve

1. **Check Steam API Configuration**:
   - Verify your Steam App ID (3434900) is correctly set in **Project Settings > Platforms > Windows > Steam**.
   - Ensure the Steam SDK is properly integrated (e.g., `steam_api64.dll` is in `Binaries/Win64/`).
   - Test with a minimal Steam setup (e.g., disable friends list queries temporarily) to isolate the issue.

2. **Debug `AdvancedSessions` Plugin**:
   - Open `GetFriendsCallbackProxy.cpp` at line 98 in your project’s `Plugins/AdvancedSessions/Source/AdvancedSessions/Private/` directory.
   - Add null checks or logging before the crash point (e.g., check `FriendsList` or `UserId` validity).
   - Recompile the plugin and test again.

3. **Review Session Setup**:
   - Check the Blueprint or C++ code triggering the friends list request in `Level_Multiplayer_Lobby`.
   - Ensure the session is fully initialized before calling `GetFriendsCallbackProxy`. Add a delay or validation step if needed.

4. **Update or Reinstall Dependencies**:
   - Ensure Unreal Engine 5.6.0 and the `AdvancedSessions` plugin are up to date.
   - Reinstall the Steamworks SDK (version 1.57) from [Steamworks](https://partner.steamgames.com/doc/sdk) to rule out corruption.

5. **Enable Crash Reporting**:
   - The log shows `Could not start crash report client using ../../../Engine/Binaries/Win64/CrashReportClient-Win64-Debug.exe`. Ensure this file exists and is accessible, or set up a custom crash handler in **Project Settings > Crash Reporter**.

6. **Test in Editor**:
   - Run the project in the Unreal Editor with the `-debug` flag to catch the crash earlier and get more detailed output.
   - Use the Output Log to monitor Steam-related messages.

### Next Steps
- Implement the above fixes, starting with Steam API validation.
- If the crash persists, share the modified `GetFriendsCallbackProxy.cpp` or relevant Blueprint logic.
- Let me know if you need help setting up the crash reporter or debugging the callstack further!

You need to update your binaries, the very first version of AS for 5.6 that I put out I reverted a workaround for a crash from 5.5 as it appeared fixed. It is in fact not fixed in 5.6, it just wasn’t showing in editor builds.

I later went and re-instated the work around but you must be on the binaries from the day before.

Edit Also this is the wrong forum thread, but its fine.

1 Like

Thank you, I commented out that section, so no more crashing. However, as stated in the other thread, I’m unable to join any sessions even using the Steam Sockets plug-in.
Sorry for commenting on this thread, I just clicked the forum link on the website, and this is where I landed.

Would you like to share some thoughts on using Mover for VR?

Mover is promising, but unfinished and SUPER unperformant last time I checked it in a network environment.

I was waiting for it to get a bit more stable before really diving into that class that I already started for it. Technically in an end goal state it should be way easier to work with and customize as the actual VR input for motion can be added just with a mover layered move struct that stays active.

The main issue is that truly customizing things is going to be harder actually, so very complicated interactions will suffer, and the offset capsule retained roomscale stuff won’t be compatible so it will all be just the unretained roomscale mode.

2 Likes

It’s our goal to have Mover work well for networked VR Pawns. It’s been a while since I used VR Expansion, can you detail what you mean by “offset capsule retained roomscale stuff”? We’ve been discussing how to have mover work for pushing the player around when walking into walls, as well as being able to lean over tables, crouching, etc. No timeline to share on this work, just wanted to share that it’s on our minds.

2 Likes

The offset capsule stuff is pretty legacy at this point, its mostly used for shared space stuff and since the majority of that work doesn’t require locomotion its likely best to use just a raw Pawn instead anyway.

For the mover and VR the implementation I was looking at was having a LayeredMove that never expires and injects the HMD’s XY translation each frame into the movement chain. Then i would just lock the camera in XY like I already have implemented. This would work essentially just like VRE’s now default mode of directly driving the character by HMD movement.

Also it would just be something that could be slapped into any other movement chain for Mover logic then.

It would be pretty trivial to have that as a default layered move option in the engine itself.

Likely would also have to do the neck placement offset logic as well to sit the capsule a bit back. For leaning approximating head to feet and shifting that neck placement back would work, or since mover actually sweeps collision bodies you could drive a head sphere separately that shares collision assuming that the movement logic gets rewritten to be more generic and less of a copy paste of the original CMC walking code. Last I looked its still hard coded to use capsule overlaps for the basic checks.

This is all assuming that it can be done that easily without precision issues / modifiers, I have it working like that in the old CMC stuff but I did go in and manually inject it in places where it wouldn’t be touched by air/water friction and things like that and it runs at a much higher precision for the HMD movement than the rest of the character does. The Mover replication of custom properties shouldn’t have an issue with the precision part but the application may be scaled in some place that I missed.

1 Like

Quick Question. Using the plug-in for a MP project. A couple of my friends are joining in. Do they have to install the plug-in manually, or will it be included in the GIT repo they download after installing the engine?

Well you should be providing them with your project repo, not the plugins itself, so yes the plugin would generally come with that. Its a project level plugin not an engine one, so the files should be self contained.

5.6.1 binaries are up

1 Like

Hi there, I found out about this plugin while searching for a way to make a stick behave as in IRL when playing the drums in VR, as in holding it with index finger and thumb (pivot point) and hitting a surface would make the stick bounce back up.

If I understood correctly, that would be possible with this plugin? Because it seems that, natively, the VR Pawn cancels any physics on grabbed objects, it’s been weeks I’m bashing my head against UE trying to make it work lol

Btw, I imported the plugin in a UE 5.5 project, clicked “Yes” to rebuild it, as mentioned in the Intro & Setup video, but it failed.

Yes you could do that, however i will say if you already have a viable project in the UE5 vr template you could change up the gripping logic to start a physics constraint between the held object and the hand instead and get the same core functionality

Also the compilation has to be done in visual studio if you are compiling the source, if you are using the binary package you need to make sure you match the engine version to the binary zip.

1 Like