Patch out the GPU checks for any x86-64 macOS Unreal Engine-based game

Overview

UnrealGPUPatcher

UnrealGPUPatcher
Download here

Patch out the GPU checks for any x86-64 macOS Unreal Engine-based game, particularly ARK: Survival Evolved.

Drag an app to patch Patching... Done!

Requirements

App: macOS 11

CLI: macOS 10.15.4 (located at UnrealGPUPatcher.app/Contents/MacOS/patch)

Instructions

  1. Download ARK: Survival Evolved on Steam (or any other game using an old version of Unreal Engine built for x86-64 macOS).
  2. Navigate to the app in Finder. If you're using Steam: right-click the game in your library, choose "Manage", then "Browse local files".
  3. Set the desired GPU type. On my 2021 14" MacBook Pro (M1 Pro), I found that Intel worked best.
  4. Drag the app into the patcher and wait for the green checkmark.
  5. Launch the game through Steam; the first launch may take up to an hour, please be patient. If you hear the music but don't see any windows, keep waiting.
  6. Enjoy!

Note: Since this is a patcher, multiplayer mode will not work for games with anti-cheat.

Background

In June 2022, the game ARK: Survival Evolved was released for free as part of a promotion on Steam. The game is built for x86-64 and is fully compatible with Intel-based Macs; however, it appeared to be marked "incompatible" with my Apple Silicon laptop. Steam still allowed me to download the game and launch it through Rosetta; however it crashed immediately after launch.

After some investigation, I figured out that the cause of the issue was simply that the game did not recognize Apple's M1 GPU and crashed while attempting to identify it. Therefore, I reasoned it should be possible to patch out the GPU model checks and launch the game otherwise unmodified. Lo and behold, after identifying and patching two functions responsible for checking the GPU model, the game ran successfully!

I posted a simple patch to Reddit, and was a bit overwhelmed by the response. I realized this may be a bit more of a widespread issue than I had realized, and people seemed to be using different versions of the game that were incompatible with the basic patch I had made, so I developed this patcher to bypass GPU checks in (theoretically) all Unreal Engine-based games. Enjoy, and use at your own risk!

Disclaimer:

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Technical Details

Unreal Engine uses a custom "Render Hardware Interface" (RHI) to abstract over various platforms, storing a GPU "vendor ID" in the GRHIVendorId global variable. Certain older versions of the engine leave this variable set to zero for unknown GPUs; however certain methods, particularly bool IsRHIDeviceIntel() and bool IsRHIDeviceNVIDIA(), contain assertions that that the vendor ID is nonzero. (see here to access the Unreal Engine source code)

The reason for intentionally crashing the game on unknown GPUs eludes me, and there is no way to disable this behavior. Therefore, this program works by patching those methods to always return a predefined value. See Patcher.swift for details.

You might also like...
ZImageCropper is a simplest way to crop image to any shapes you like.
ZImageCropper is a simplest way to crop image to any shapes you like.

ZImageCropper ZImageCropper is a simplest way to crop image to any shapes you like. Example To run the example project, clone the repo, and run pod in

PrettyBorder is a SwiftUI package for managing an customized border and background at any kind of view.
PrettyBorder is a SwiftUI package for managing an customized border and background at any kind of view.

PrettyBorder Description PrettyBorder is a SwiftUI package for managing an customized border and background at any kind of view. Preview of end result

Rudimentary implementation of a uncompressed PNG encoder in Swift without any dependencies

MicroPNG This package currently offers a very minimal PNG encoder for uncompressed RGB and RGBA PNG files. It does not rely on any frameworks and shou

A complete Mac App: drag an image file to the top section and the bottom section will show you the text of any QRCodes in the image.

QRDecode A complete Mac App: drag an image file to the top section and the bottom section will show you the text of any QRCodes in the image. QRDecode

A free, multiplatform SDK for real-time facial motion capture using blendshapes, and rigid head pose in 3D space from any RGB camera, photo, or video.
A free, multiplatform SDK for real-time facial motion capture using blendshapes, and rigid head pose in 3D space from any RGB camera, photo, or video.

mocap4face by Facemoji mocap4face by Facemoji is a free, multiplatform SDK for real-time facial motion capture based on Facial Action Coding System or

iOS Framework that makes it easy to preview images on any UIImageView.
iOS Framework that makes it easy to preview images on any UIImageView.

AZImagePreview iOS Framework that makes it easy to preview images on any UIImageView. Screenshots Installation: Cocoa Pods: pod 'AZImagePreview' Swift

Pipable is an iOS library to implement Picture in Picture for any UIView.
Pipable is an iOS library to implement Picture in Picture for any UIView.

Pipable Pipable is an iOS library to implement Picture in Picture for any UIView. This is done just by conforming to a protocol. The "Audio, AirPlay a

Small color quantizer for bitmaps without any dependencies or use of frameworks

MicroColorQuantizer This package currently offers a very simple color quantizer

Create an '.icns' file from any image

createicns Create an '.icns' file from any image. Usage This command line tool makes it incredibly simple to create an '.icns' icon file from an image

Comments
  • Error when trying to patch

    Error when trying to patch

    Inside of unrealGPUpatcher: URL: file:///Users/larsvanzuthpen/Library/Application%20Support/Steam/steamapps/common/ARK/ShooterGame.app/ Starting patch... Exec URL: file:///Users/larsvanzuthpen/Library/Application%20Support/Steam/steamapps/common/ARK/ShooterGame.app/Contents/MacOS/ShooterGame Backup URL: file:///Users/larsvanzuthpen/Library/Application%20Support/Steam/steamapps/common/ARK/ShooterGame.app/Contents/MacOS/ShooterGame.bak Macho: Executable (x86_64) Patching error: Error Domain=MKErrorDomain Code=6 "Image does not have a __LINKEDIT segment." UserInfo={NSLocalizedDescription=Image does not have a __LINKEDIT segment.}

    opened by Larsvzboy 0
  • [Bug] Ark crashes after a fixed time in the menu after patching

    [Bug] Ark crashes after a fixed time in the menu after patching

    So, prior to patching, the game always crashed as I expect. After the patch though, the game boots up, plays music and crashes after a few seconds. It seems the time it takes to crash is always the same. Here's a screen recording of that in action:

    https://user-images.githubusercontent.com/47925793/179478987-4da86958-4229-470d-b71b-02480ca9603e.mov

    And here's a crash dump from the console app: https://paste.sangelo.space/opifisufep.pl

    I don't know weather this is due to the patcher or my M1 mac. I've tried both the Intel and the NVIDIA options. I am running this on a 2020 13" MacBook Pro

    opened by SangeloDev 1
Releases(v1.1)
Owner
Jacob Greenfield
Jacob Greenfield
GPU-based media processing library using Metal written in Swift

GPU-based media processing library using Metal written in Swift. Overview MetalAcc is a GPU-Based media processing library that lets you apply GPU-acc

Jiawei Wang 259 Dec 17, 2022
GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing.

GPUImage 2 Brad Larson http://www.sunsetlakesoftware.com @bradlarson [email protected] Overview GPUImage 2 is the second generation of th

Brad Larson 4.8k Dec 29, 2022
GPUImage 3 is a BSD-licensed Swift framework for GPU-accelerated video and image processing using Metal.

GPUImage 3 Janie Clayton http://redqueengraphics.com @RedQueenCoder Brad Larson http://www.sunsetlakesoftware.com @bradlarson contact@sunsetlakesoftwa

Brad Larson 2.4k Jan 3, 2023
A GPU accelerated image and video processing framework built on Metal.

MetalPetal An image processing framework based on Metal. Design Overview Goals Core Components MTIContext MTIImage MTIFilter MTIKernel Optimizations C

null 1.5k Jan 4, 2023
XAnimatedImage is a performant animated GIF engine for iOS written in Swift based on FLAnimatedImage

XAnimatedImage is a performant animated GIF engine for iOS written in Swift based on FLAnimatedImage. An illustration is shown below: Features Plays m

Khaled Taha 561 Sep 9, 2022
Zoomable - A container that allows you to zoom in and out of an image using only SwiftUI

Zoomable It is a container that allows you to zoom in and out of an image using

jasu 48 Nov 28, 2022
High performance GIF engine

SwiftyGif High performance & easy to use Gif engine Features UIImage and UIImageView extension based Remote GIFs with customizable loader Great CPU/Me

Alexis Creuzot 1.7k Jan 3, 2023
An early experimental general-purpose pattern matching engine for Swift.

Declarative String Processing for Swift An early experimental general-purpose pattern matching engine for Swift. See Declarative String Processing Ove

Apple 232 Jan 2, 2023
A simple mesh viewer for MacOS based on Swift and Metal and using Assimp for loading meshes

Metal Mesh Viewer A simple triangle mesh viewer for MacOS This application is a simple (triangle) mesh viewer that should be capable of rendering even

J. Andreas Bærentzen 0 Dec 13, 2021