Marvel’s Deadpool VR

icon

  • Product description: Meta Quest Virtual Reality Action-adventure game
  • Release Date: November 2025
  • Website: Marvel’s Deadpool VR
  • Product history: Client of ClutchplayGames as a consultant.
  • Team: Twisted Pixel Games and ClutchplayGames
  • Core Technologies: Unreal 4, c++, blueprints

The target hardware, Meta’s Quest 3, is an amazing piece of engineering. That said it still required a lot of work to fit a full AAA experience into what that hardware could handle.

My role was mostly related to baseline framerate optimization. There was another team on the project doing hitch optimization, so we had to interact frequently to avoid stepping on each other.
I was also involved in a few background game systems, like a shared in-game management system for “advertising” screens.

What If: An Immersive Story

Icon

  • Product description: Apple Vision Pro augmented reality interactive experience
  • Release Date: May 2024
  • Website: What If: An Immersive Story
  • Product history: Client of ClutchplayGames as a consultant.
  • Team: ILMxLAB and ClutchplayGames
  • Core Technologies: Unreal, Xcode, c++, swift

My role was in Mac Unreal engine support. I handled a bunch of upgrade issues while moving from Unreal 4 to 5 on Mac host machines and iPad target devices. My general experience with the Apple developer ecosystem allowed me to ramp up on Swift and provide the team key insights on how Apple approaches development.

Additionally I implemented a rendering path to get movie files playing into a texture for use in the Mixed Reality pipeline.

Magic SpellSlingers

Icon

  • Product description: Free-to-play game translating the Magic card‑game experience to a real‑time action‑RPG format for iPhone and Android devices.
  • Release Date: August 2022 (Sunset June 2024)
  • Website: Magic Spellslingers
  • Product history: Client of ClutchplayGames as a consultant.
  • Team: Pipeworks and ClutchplayGames
  • Core Technologies: Unity3d, C# server

A Unity3d game that had an authoritative server, sharing the same C# code in both. I was responsible for reworking a significant portion of the server core so that it mirrored what the client did.

Psychonauts 2, Mac port

Icon

  • Product description: Port to Mac of recently developed title
  • Release Date: May 2022
  • Website: Wikipedia on Psychonauts 2
  • Product history: Client of ClutchplayGames as a consultant.
  • Team: ClutchplayGames
  • Core Technologies: Unreal 4, c++

This was an Unreal 4 project that was always planned to be released on the Mac platform, but was never tested on that platform during development. This led to many significant bugs and rendering errors. We were able to get significant help from the original developers on some of the issues.

This was a project where I had to rely on the Clutchplay team at large to nail down multiple rendering issues. My responsibilities were related to fixing Mac platform compile and packaging issues.

Unreal: Mac support (part 1 of ?)

It’s super annoying that searching the internet doesn’t work for Unreal. So here’s something I just learned that might help the next person.

I’m trying to work out why Lightmass refuses to run on my Big Sur Mac. Not even the “direct from Epic Installer” version would work. I was working with 4.26, but the underlying code is unchanged through at least 4.27, and probably 5 as well. The documentation says Macs don’t support Swarm. Okay. So I think nothing of it when the Lightmass stuff times out after 60 seconds trying to do a network call that returns with

checkf(bConnectionEstablished, TEXT("Tried to open a connection to Swarm, but failed"));

But then almost immediately, the Lightmass process dies with

Assertion failed: CurrentThread == GetCurrentThread() [File:/home/user0/gre/sa/UnrealEngine/Engine/Source/Runtime/Core/Private/Async/TaskGraph.cpp]

What’s going on here?

Digging into that block of code… The Recipient isn’t valid, so in the worker thread it’s calling to Ping the MessageEndpoint. Okay. But then it starts waiting for something with FTaskGraphInterface::Get().ProcessThreadUntilIdle(ENamedThreads::GameThread);. What took me a while to understand is that was stating that the calling thread was named ‘GameThread’. Except it wasn’t, it was a worker thread.

How did this ever work?

What’s supposed to happen

  • The Editor needs to be running.
  • That bConnectionEstablished? Has nothing to do with Swarm.
  • It’s a connection to the Editor. For passing back status updates.
  • And is a lie, because to return that “established connection” only checks that the socket can be opened.
  • Which normally does a connect in the actual main thread.
  • And gets a response on the main thread.
  • And sets the Recipient valid in the HandlePongMessage callback. How very clear.

What’s actually happens

But the thing is – and this is what took me many days to figure out – is that just because you can open the socket doesn’t mean you’ll get a response.
For example, if you have your firewall turned on, like it should be.
No version of the Editor and Lightmass is signed for Big Sur, so the Firewall automatically blocks all the traffic.

Even if you ‘enable network connections’ for them both, you have to restart both apps for it to ‘take’, and if you rebuild of the Editor it invalidates the ‘pass’. Which, if you’re developing via a from-source build of Unreal, you’ll be doing all the time.

In the end… you have to disable your Firewall. Otherwise you get an error that makes no rational sense in code that’s written to suggest something else is wrong.