Finally, AI began to be used for its intended purpose, and now you can get such results. Yes, the game is 2005, but it looks incredible on my M1 base, and works at an honest 60 fps. I hope in the near future we will get more ports of old but very cool games, or games for Mac 32 bit ported to Apple silicon.
managed to reach this point on my MacBook M1 Max. I’ve spent about 24 hours trying to optimize everything; it wouldn’t even launch on Apple Silicon before, but now I’m hitting 23–24 fps. The CPU is very well-optimized—usage is quite low, just as it should be—but the GPU and shaders are the current sticking points. I’m working on those; once I clear up the visual glitches caused by other players' lights, I hope to shave off enough time to boost the frame rate further.
We’ll see—in the meantime, I hope to post something to GitHub later this evening so others can collaborate with me.
Beyond that, I’d like to bring *Forza Horizon 3* or *2* to Apple Silicon Macs, since nobody else seems to be thinking of us! =)
I make this post because if you search "how to play [insert Gacha game] on Mac", most of the result never consider the user being a broke college student with a Macbook Neo.
I do not guarantee these are the best ways to play those games, but I can guarantee that they're free. Not "free trial for X days", not "the software is free but to get a game file you need to wait for several days unless you paid for the VIP queue", it's free free.
My machine: M1 Macbook with 16GB of RAM.
Genshin Impact, Honkai: Star Rail, Zenless Zone Zero
Each game has a custom launcher, CN & Global has its own version.
Surprisingly good performance.
Update right away.
Work with mouse & keyboard.
Devs actively support & fix bug.
Wuthering Wave, Honkai Impact 3rd, Infinity Nikki, Neverness to Everness, Reverse: 1999, Chaos Zero Nightmare
Use the native MacOS version on App Store.
Reverse: 1999 & Chaos Zero Nightmare aren't really native, more that they run the iPad version of those games on your Mac. However, since they're turn based card game, I find that controlling with just the mouse is completely fine.
Path To Nowhere is similar but I don't play the game so I'm not sure.
HI3rd, R1999 & CZN are pretty lightweight game so performance is fine.
No one seem to make an attempt as making a completely free way to play the PC version of Wuwa, NTE & Infinity Nikki so I can't say this the best performed options, but they're definitely the best supported option.
Wuwa, NTE & Infinity Nikki are demanding 3D open world games so they barely reach 40 - 60 fps with the lowest setting on my M1 machine.
WARNING: at the time of this post, the MacOS version is being blocked by Endfield's newly updated anti-cheat (YES, all of your beloved Singleplayer PvE Gacha game has anti-cheat). The devs already fix it for Window & Linux and are working on the MacOS version.
If you aren't tech savvy, best is to follow to Youtube on how to install Steam with Sikarugir, then play the game above via Steam since they all available on Steam.
Tips: tick both Direct3D to Metal & DirectX to Vulkan.
PGR & Limbus perform really well.
Aniimo is too new so I can't find any free alternative for the PC version to compare.
They all work with mouse & keyboard.
They all get new update right away.
Devs actively support & fix bug. Most user of Sikarugir use it to play game on Steam so the devs focus mostly on that.
Not gacha games but Warframe & Brawhalla run well too.
Install them similar to Steam, but choose the .exe file instead of using Winetrick.
After running the Launcher Installer, change the directory to the Launcher, so that subsequence boot will open the launcher instead of the Launcher Installer.
Use the launcher to download and install the game, then run the game through the Launcher.
Technically you can install PGR & Aniimo this way too because those games also have a Window Launcher.
Girl Frontline 2 run extremely well, while DNA run like piss (but I suspect it's because the game itself is poorly optimized).
They all work with mouse & keyboard.
They all update right away.
Reliable method for emergency
Most of the method above are 3rd party solution done by indie devs, so the risk of something breaking after the game update (see Endfield above) or the devs drop the project indefinitely are always present. If that happen on a day you really need to open your game, here's an emergency method.
There is also Playcover which is an iOS emulator. However, it require you to install the .IPA file yourself, but since all Gacha games has regular update, this option is kind of a pain in the *ss.
Bluestack Air emulate and entire Samsung phone instead, so you download & update the game through the real Google Play.
I wrote a static recompiler that translates the game's code to C and builds it as a native arm64 app. You still need Rosetta installed, but only for a small helper that compiles the shaders.
I got around 80-110 FPS on my M1 Max at 4k resolution.
You need your own Steam copy of the Mac version. The repo has no game files. One script checks your Mac, translates your copy and builds the app. It takes about 5 minutes.
Press Cmd+F in game and you'll see the FPS counter.
let me know if you find any bugs and try it out.
I'm planning to do the same for LEGO Harry Potter whenever I have time!
Thank you to everyone who has tried and tested Mac-ever!
In just a week we've hit over 1000 downloads across CurseForge and Wago which is absolutely amazing, but I know there are more Mac gamers out there who are struggling with in-game optimisation.
For those who don't know, Mac-ever is the addon that measures your World of Warcraft: Forever setup against your Apple Silicon Mac, and works out the best settings for the frame rate you want.
If you have any feedback, please favourite Mac-ever on CurseForge or Wago and leave a comment. This will help spread the message that there is a way to improve the WoW: Forever Mac experience.
Equally, if you have troubleshooting queries, please get in touch on CurseForge (preferably), or here on Reddit, so I can try and work it out.
My 8BitDo Ultimate 2C Wireless worked in some games on macOS but was invisible to every game that uses Apple's GameController framework. I fixed it in the firmware. The controller now identifies as an Xbox Elite v2 over Bluetooth, so games see a fully supported controller with no drivers and no background software.
What the patch does
The controller now advertises itself as an Xbox Elite v2 over Bluetooth, which is an identity macOS already supports.
It sends input reports in the real Xbox Bluetooth format, so every button, stick, and trigger lands where Apple's driver expects it.
Rumble works. The stock Bluetooth rumble path was broken in a way that macOS could never use, and the patch repairs it.
Everything works except L4 and R4. The controller sends them, and SDL-based readers can see them, but macOS does not expose paddle button, so GameController-native games won't see them. If you want them in a game, remap them to standard buttons on the controller itself. Tested on an M5 Mac running macOS 27.
Caveats
This modifies firmware, so flash carefully. The script backs up your flash first, and the official 8BitDo updater can restore stock firmware over USB, but nothing is guaranteed. Flash at your own risk.
I built this with AI assistance, including the reverse engineering.
It only accepts the official 1.06 beta as the base image. Other versions are refused.
I only tested Apple Silicon on macOS 27. It may work on other devices as this patch is done in the controller firmware. If you try it on something else, I would like to hear what happens.
I have minimal programming knowledge, but since nobody else is working on this, I thought I'd give it a shot using AI. Since OpenEmu was brought to Apple Silicon this way, I figure, maybe I can use AI to get Azahar and OpenEmu to talk to each other...? I'm currently in the midst of getting the Vulkan renderer to talk to OpenEmu, and I've made good progress. Aside from that portion of the project, I have successfully built a 3DS plugin for OpenEmu - and I designed an icon (without AI!) for it too. For the moment, games are software-rendered and not really playable due to their speed (2-3fps on an M3 Max processor), but again, hardware rendering is in the works. Hopefully I can get it working. Stay tuned...
Hey everyone! 👋
I just released CherryHud, a lightweight, open-source, and hassle-free performance overlay for macOS that I've been developing! If you game on a Mac and want to keep an eye on your performance, this is for you.
🌐 Website & Download:https://cherryhud.com
🐙 Source Code:https://github.com/Matricard/CherryHud 100% Safe & Anti-cheat friendly: Requires no admin access (no root) and injects zero code into your games. No risk of getting banned. Ultra-precise Telemetry: Track your FPS, frametime (with micro-stutter detection), CPU/GPU load, temperatures, and battery in real time. Smart Game Mode: The overlay automatically pops up when a 3D game goes full-screen and hides itself as soon as you return to the desktop. Zero Input Lag: Runs in a separate window that is completely invisible to your mouse and keyboard, with absolutely no impact on your responsiveness.
💻 Requirements: Apple Silicon Mac running macOS 13.0 (Ventura) or newer.
The project is completely free. Feel free to download it, try it out, and let me know what you think! 🍒
Stuttering in GeForce NOW on a Mac is so annoying. But there's a fix for MacOS that actually works.
The cause is AWDL, the Wi-Fi feature behind AirDrop and Handoff. Every few seconds it hops your Wi-Fi to another channel, and in a stream that shows up as lag spikes. macOS keeps turning it back on, so a one-time fix doesn't stick.
I made a lightweight app that turns AWDL off while GeForce NOW runs. Every time macOS switches it back on, the app catches that at the kernel level and turns it off again within a fraction of a millisecond. When you quit, AirDrop works again. It sits in the menu bar and stays out of your way. Lifesaver for me!
Credit where it's due: it started with swicken's gfn-awdl-watcher script, and the technique comes from Oliver Ames' Ping Warden, which builds on James Howard's AWDLControl and jamestut's awdlkiller. Thanks to all of them.
Ping Warden is a great app with more features, but it now costs $15. I don't think a fix like this should cost money, so mine is free and open source. It's written in Rust, runs on Apple silicon and Intel, and comes in 7 languages.
Heads-up: it isn't notarized by Apple, so the first time you open it you need System Settings → Privacy & Security → Open Anyway. It asks for your password once to install the small helper that switches AWDL.
the game with sikarugir takes around 1.7GB of space which is mostly windows overhead, after using butterscotch (re-implementation of gamemaker runner) the whole app is now around 160MB.
Obviously we have a ton of AI slop on this subreddit, but there seems to be some pretty solid recompilations/ports that seem to be going under the radar.
It'd be nice to have a database not unlike the Crossover compatibility DB that lists whether a game has been recompiled and/or patched by AI to work on Mac
Been pretty excited with the developments lately with NotProton and even the recent WINE drop... but I noticed that UTM 5.0.8 was just released, and some of the advances they've made throughout the 5.0 development cycle seem worth looking at!
For anyone who hasn't been following UTM recently, a few particularly interesting developments:
DirectX 11 acceleration for Windows 11 VMs, using DXMT.
(WOW!) Experimental DirectX 12 support, using Apple's D3DMetal.
Vulkan 1.3 support for Linux VMs, through VirtIO Venus and Mesa.
Continued improvements to GPU compatibility, rendering, and performance, including fixes for high-refresh-rate displays and graphics-related hangs.
Improved VM snapshots and other virtualization capabilities.
I think what interests me most is that we're seeing open-source virtualization on Apple Silicon progress beyond simply running Windows toward actually accelerating modern graphics APIs.
Obviously, this isn't to suggest that UTM has suddenly become a replacement for CrossOver (+NotProton) or Parallels for gaming. The Windows graphics driver is still experimental, and game compatibility remains limited. But the underlying progress seems pretty awesome, particularly considering how limited graphics acceleration used to be in UTM.
I'm curious whether anyone here has been experimenting with the newer UTM releases? Have you managed to get any interesting Windows games running, or noticed meaningful improvements compared with earlier versions?
I made lp-engine, a native macOS runtime for LovePlus+, the Japanese Nintendo DS dating sim that never received an English release.
I developed it on an M5 MacBook Pro. The release includes a universal macOS app for both Apple Silicon and Intel Macs, alongside Windows and Linux builds.
This is not an emulator. It runs the original game from your own Japanese LovePlus+ BOXJ ROM, while replacing the DS hardware environment with a native desktop runtime. Nothing from the game is included in the app or repository. On first launch, it asks for your ROM, reads the necessary data into its own folder, and leaves the original file unchanged.
The native version includes the full English translation, higher resolution 3D, texture filtering, smoother toon shading, anti aliasing, optional smoother character motion, mouse touch input, keyboard and gamepad controls, microphone support, ordinary save files, and an in game clock that follows your Mac’s time.
The goal was not simply to put a DS image in a window. The original game logic and data are kept wherever possible, while the presentation can look much sharper than it ever could on the DS. The two screens stay side by side and upright, as if you are holding the console.
The English work covers the dialogue, menus, system messages, and redrawn interface graphics. LovePlus+ was built around fixed width Japanese text, so the runtime also adds proportional English layout and handles places where translated text interacts with original game logic.
In the latest instrumented playthrough, 96 percent of execution ran natively. The remaining original ARM functions run through an interpreter that shares the same memory model with the native Rust side.
I used AI extensively during the reverse engineering, implementation, and documentation work, but the result is checked against original game code, emulator recordings, replay fixtures, and differential tests.
I will put the download, source, and detailed reverse engineering documentation in the first comment. I would love to hear how it runs on other Macs, especially Intel machines.
Other improvements - upscaled graphics and fonts to 4k so it looks smooth and added cfg file to change keyboard layout if needed. If you have Mac please test and let me know if you find any issues.
Hi guys, I'm new into this and I was curious to try to play switch games on my MacBook Air m3 with 16g or Ram. I found out about Astris and I decided to try out super Mario odyssey, unofrtunately the games lags a lot in cutscenes and it lags every time that It goes trough an animation for the first time, after that it repeats the same animation pretty smoothly.
I know the computer is a few years old but I was wondering if there's any way to fix this lags? Thanks in advance to everybody
Thanks to GPTK 4 beta 3, AC Black Flag Resynced now playable on Crossover. I'm using Crossover 26.3 with GPTK 4.0b3 on Medium Settings with DLSS Quality on 1600x1200 iPad display ratio. Got around 24-27 FPS. I could lower it or turn on frame gen to boost the FPS, but frame gen on metal still produce some graphic glitches sometime.
Sorry took the photos from my iPad, I'm using Sunshine & VoidLink on iPad with PS4 Controller as display and to control my Mac Mini M4. Took some screenshots on mac but it turns out to be a screenshot of another application.
I had just purchased the new ROR2 DLC, Hallowed Concepts, and wanted to play it on my MacBook. I got through loading and character selection, but when I pressed E to leave my escape pod, nothing happened. Now I have tried reinstalling the game, removing my mods, and switching from keyboard to controller, and nothing has worked for me. With the other 3 DLCs installed, I did not have this bug.
Does anyone have any insight into how I can fix this?
I'm using Crossovers, and I have a 2022 MacBook Pro with an M2 Chip and 16 GB of Memory. I am running Tahoe 26.6.2
With a custom patched of CrossOver 26.3 (26.3.0.39832), DXMT 0.80, Black Ops 2 (Steam Version running with Plutonium windows version) is working on M1 Pro MBP 14” 16GB. Video uploaded shows it running on external display G80SD HDR on even the game does not use it (1080p scaled on mac OS and in game at 1080p).
Also wined3d works too but I wanted to drop Vulkan/MoltenVK layer by using DXMT.
BO2 is 32 bits, the patches seems to have fixed some 32 bit programs that used to freeze or be really slow.
Game works well in multiplayer too, very smooth with built-in MBP display at 1512x982
My patch works at first with Plutonium r5354 too. I did not test a lot running BO2 without Plutonium but it works. I still have some dig up to do.
Few days ago I posted a multiplayer on plutonium r5354 offline only that I remove when I saw hours later that the description of the post wasn’t added by me… my bad for removing the video and creating confusion, i couldn’t properly edit the post...
Also the quality of the recording is bad my bad too… also the gameplay...
Has anyone noticed a real jump in Oblivion Remastered performance since GPTK 4.0b3?
I last played it about a year ago. It was playable, but I had to run 1080p with FSR on performance, and it never felt great (m3 pro 12 cpu/18gpu/36gb ram).
I’m curious whether that’s changed. Has anyone really min-maxed their setup, specific in-game settings or bottle variables? Anything you’d call secret sauce is welcome. I'm fine with sticking to Skyrim, Elden Ring and Clair Obscur as well, so perfectly fine to tell me I should simply move on.
Hey guys this is my first post ever on reddit.I've been a long time lurker looking at peoples cool projects and always wanted to contribute my self.However while I love researching and tinkering I have 0 coding and developer experience.This project is based of the efforts of other talented people who have landed the ground work for this all I am is a middle man with a ChatGPT Plus subscription and desire to play games like Rocket league and Dead by daylight on my Mac.Using GPT 6.1 Sol "I" (I know people will be triggered by "AI Slop" but I did look through various forums and do my research to fix certain issues preventing launching) have compiled a few fixes to get Rocket League and Dead by daylight running with full anti-cheat compatibility.This is a guide for Rocket league since I am working on Dead by daylight since performance is a work in progress and I have modified Steamac to get playable performance.I assure you it will come soon.I want to give huge credits to the talented devs that facilitated this I should not get credit you should give it to these guys:
- https://github.com/StonkGuy/eac-arm64-emulation-poc
- https://github.com/fxgl/steamac
As for performance on Rocket League it is pretty good getting around 140-150fps on 1080p max settings on my M5 MacBook Pro 24GB 10 core CPU and 10 Core GPU.Note this is running a virtual machine so you will likely need a minimum of 16GB RAM. Initally when you launch there will be a lot of stuttering due to shader compilation which in my experience after playing a few games will smoothen out.Also while this patch doesn't modify the anticheat or tamper with it there is still a chance you could get banned however I don't think you will but play with caution. To the best of my knowledge while I can't guarantee every anti cheat game will run and each game may require separate fixes or may not run I think StonkGuy's EAC patch could be expanded to other titles and if it works through proton on linux then it may be able to be run through this setup.Again its a hypothetical but after this Im a bit more optimistic. As for EA games with EA's proprietary anti-cheat will most likely not run through this setup as EA doesn't even support linux.I have seen a separate project that works on anticheat support for ARC Raiders and The Finals.This gives me hope for the future of Mac gaming. https://www.reddit.com/r/macgaming/comments/1x52ffb/arc_raiders_running_on_mac_not_cloud_gaming/ https://www.reddit.com/r/macgaming/comments/1x7l6tq/the_finals_also_working_on_macos/
I've Uploaded Gameplay Please excuse my horror gameplay I haven't played since It stopped working on Mac and my wifi is horrible (Precisely why I hate when people say "Use Geforce Now its latency is good" NOT FOR ME 😭 its a non-solution.). https://youtu.be/VJp97UEk_Ck
Since Its a Patch to the FEX translation layer I'm curious to see if it would work through Crossover Preview 27 without the VM for better performance. since it has an implementation of FEX.Unfortunately I can't test this out since I can't buy crossover so if someone more talented can that would be cool. Also I hope an actual dev can further this project; it’s still in its early stages. Just to Preface the guide I've attached Is completely AI generated based on the chat history of the conversation in which I implemented the fixes and everything I learnt along the way like bugs because its kinda long and tedious process of getting it setup.If you have any issues I most likely won't be able to help since I'm not an actual dev or anything but if you have access to ChatGPT subscription or Claude it can be really helpful for bug fixing and solving issues.If you do have access then you could just copy paste the guide and give the AI permissions if you feel comfortable with tAlso show some resilience and don't just go straight asking for help take the time to research and actual understand the issue and what's happening.I
Now I have a mini-rant on some things skip this if you wanna go straight to the guide:
After observing this subreddit for a while it really annoys how many people rant about "Ai-slop" and complain about vibe coded projects and hate anything besides Crossover.People completely lack nuance and are completely pessimistic.When any new technology comes out there always those people who fear-monger or make it seem 'cool' to not try out and tinker new stuff.While Ai can be negative people seem to completely overlook the positives.Yes I also dislike the Ai slop vibe coded launchers with 0 effort however there are many positive projects coming out the use of AI like decomps recomps and might incentivise developers to port games to the Mac because it becomes easier with AI.Also this crossover glazing needs to stop.While Codeweavers have done an amazing job with crossover and really deserve the praise and support not everyone is in a privileged position to spend 70USD which may not seem much but to people in different parts of the world or a kid who's 15 and his parents just got him a MacBook Air for school who wants to enjoy a few games on the side.Gaming should not be locked down to those who can afford it. Futhermore The people who constantly lack nuance and bring down genuine projects like Steamac which is linked above and Varmint https://github.com/kisasexypantera94/varmint which I used the Neptune virtualisation idea to get Dead By daylight running at decent performance.Options and competition is always great as it provides ingenuity and innovation and each person has unique ideas and perspectives that can help further progress the mac-gaming community.Just the fact we have options we should be grateful and this projects are what lead to new innovations in this mac-gaming space.If I was like ehh I can't run anti-cheat games I guess il just stick to geforce now I would never get this running and same with the talented people who made the foundational projects that have facilitated this.If the Steamac dev was like yea Il just stick to crossover none of this would have happened.vIm sorry guys lol I know its a loaded paragraph but its a externalisation of my frustration with those pessimistic type people who completely lack nuance on this sub and can't see that nothing is black and white things can be both good and bad like AI.
Rocket League on Apple Silicon: Steamac + StonkGuy FEX + Legendary
This guide installs the Epic Games version of Rocket League inside Steamac's SteamOS virtual machine. It uses the public Steamac app, StonkGuy's patched FEX and Proton Experimental.
The same steps apply to Apple Silicon MacBook Air, MacBook Pro, iMac, Mac mini, Mac Studio and Mac Pro models that meet Steamac's macOS requirements. Commands use your SteamOS home folder automatically; no Mac username, chip-specific setting or fixed game-install folder needs to be substituted.
Where to type: after Step 3, every command goes in Konsole inside SteamOS, unless a step explicitly says on your Mac. Run one command block at a time and wait for it to finish. Copy commands only—not terminal prompts or example output.
Step 1 — Prepare your Mac
You need:
An Apple Silicon Mac: M1 or newer.
macOS 15 or newer for Steamac.
16 GB RAM or more is recommended for this setup.
A Steam account and an Epic Games account.
Rocket League added to your Epic Games library.
Internet access and enough storage for SteamOS, Steam tools, the FEX build and Rocket League. Set aside roughly 100 GB of free Mac storage as a planning allowance; check the installer's actual space requirements before downloading.
On your Mac, visit the Rocket League Epic Games page, sign in, and add the game to your library if you haven't already.
Download the FX Steam Launcher.dmg. The source-code archives are not the app installer.
Open the DMG and drag FX SteamLauncher.app to Applications.
Open FX Steam Launcher from Applications.
The public release checked for this guide is 1.9.1. Its release page lists Apple Silicon and macOS 15+ support. Steamac releases
Step 3 — Create your SteamOS disk
In FX Steam Launcher on your Mac:
Choose Create New Disk….
Select the stable SteamOS branch if asked.
Review and accept the displayed agreements.
Choose where to save the disk image. A folder on the Mac's internal APFS drive is a straightforward choice.
Choose 128 GiB for the home/game storage area if space permits.
Set and remember the SteamOS user password if prompted.
Start creation and wait until SteamOS finishes booting.
Sign in to Steam inside the VM.
If macOS asks for microphone permission, allow it so the VM's audio input can initialise.
Leave VM CPU and RAM settings on their defaults initially. Keep SSH disabled; the steps below use the VM's own terminal.
Use Steamac's built-in Vulkan graphics path. If your version offers a Graphics path selector, choose Vulkan (classic). If it only offers a Vulkan driver selector, leave the default driver selected initially. Keep the initial display resolution at its default until the game launches; set your preferred resolution afterwards.
To find the Mac app's settings, click FX Steam Launcher → Settings… in the macOS menu bar, or press Command+,. Changes marked for the next start need a VM restart. Steamac settings and disk documentation
Step 4 — Open Desktop Mode and Konsole
Inside SteamOS:
Open Steam's main menu.
Select Power → Switch to Desktop.
Wait for the KDE desktop.
Open the application menu at the bottom left.
Search for Konsole and open it.
Click inside Konsole before entering commands. To paste, use right-click → Paste or Ctrl+Shift+V.
Check that you are in the Linux VM:
uname -m
The normal SteamOS guest result is:
aarch64
Keep Steam running in the background. Steamac's Desktop Mode runs inside the existing guest. Desktop Mode documentation
Step 5 — Install the Steam compatibility tools
Inside SteamOS, open Steam's Library, enable the Tools filter, and install these tools to the default SteamOS drive:
FEX-Emu: The FEX emulator tool
Proton Experimental: The standard x86-64 tool; not a tool labelled ARM64
Steam Linux Runtime 4.0: The standard runtime; not the separate ARM64 edition
Proton EasyAntiCheat Runtime: The Steam runtime tool
If a tool is hard to find, paste the corresponding command into Konsole, press Enter, then complete its installation dialog in Steam:
Install FEX-Emu:
steam steam://install/3127680
Install Proton Experimental:
steam steam://install/1493710
Install Steam Linux Runtime 4.0:
steam steam://install/4183110
Install Proton EasyAntiCheat Runtime:
steam steam://install/1826330
Wait until all four downloads finish. Opening an install dialog does not mean the tool has finished installing.
Valve documents runtime 4.0 as the runtime for Proton 11 and newer. StonkGuy's setup identifies Steam's FEX tool and Proton EAC Runtime. Valve runtime documentation, FEX setup
Each command should print a version. The SteamOS image used by the public FEX instructions includes the build tools. If one says command not found, stop here and check the FEX requirements instead of continuing with an incomplete build environment.
Step 7 — Download StonkGuy's public FEX setup scripts
This downloads the scripts. It does not build or replace the Mac app.
If the folder already exists from an earlier attempt, use that folder; do not paste the clone command repeatedly.
Step 8 — Build the patched FEX
Close any running games. Keep Konsole open.
Run:
cd "$HOME/steamac-fex-setup/fex-eac"
JOBS=2 sh build-fex.sh
Wait for the build to finish. This can take a while. The final output should include a line beginning with staged:.
If the compiler is killed because it runs out of memory, rerun with one job:
JOBS=1 sh build-fex.sh
The public script downloads the pinned eac-2610.2 FEX source and builds it inside SteamOS. You do not need to edit its source or apply individual patch files yourself. Public build script
Step 9 — Install the patched FEX
With games closed, run:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh
Check the installation:
sh install-fex-tool.sh status
The installer should report that the build was installed or is already installed. It backs up Valve's original files and verifies the replacement. Do not continue if it reports an incomplete stage or installation. Public installer
If it reports FEXServer running, close games, shut down and restart the VM, reopen Desktop Mode and Konsole, then rerun the install command before starting another game.
You should see Legendary's version. This installs the Python application into your home folder. You do not need an x86-64 AppImage or a separate Epic Games Launcher installation. Legendary requires Python 3.10+. Legendary project, Python package configuration
Open the login URL Legendary displays. If no browser opens automatically, copy the URL into the browser inside SteamOS.
Sign in to the Epic account that owns Rocket League.
Complete any two-factor authentication prompt.
Look for the returned authorizationCode.
Copy only the code's value into Legendary's terminal prompt and press Enter.
The result may be a plain page containing JSON. You do not need to navigate to the redirect URL yourself. If the code expires or fails, rerun auth --disable-webview and obtain a new one. Keep login codes private. Legendary authentication instructions
Confirm that Rocket League is in your library:
"$HOME/.local/share/legendary-env/bin/legendary" list
Find Rocket League. Its app name in this setup is Sugar. The listing is output, not a command—do not paste the whole listing back into the terminal.
Rocket League should appear with its installation folder. If your library lists a different app name, use the identifier actually shown for Rocket League and update the Sugar key/launch command in Step 13 accordingly. Legendary uses app identifiers for installation and launch. Legendary CLI documentation
Step 13 — Create the Rocket League Proton launcher
This helper connects Legendary's launch command to the installed Steam FEX, runtime and Proton tools. Legendary still supplies the game's executable and Epic authentication arguments.
In Konsole, paste the entire block below once, including the first and last lines:
cat > "$HOME/rocket-proton-wrapper.py" <<'PY'
#!/usr/bin/env python3
"""Epic Rocket League via stock Steam tools and the installed FEX tool.
This launch configuration does not patch Steamac, Proton or the game.
Legendary supplies the original executable and fresh authentication arguments.
"""
import json
import os
from pathlib import Path
import shlex
import sys
def prepare(home, arguments, inherited):
roots = [home / '.local/share/Steam', home / '.steam/steam', home / '.steam/root']
steam = next((p.resolve() for p in roots if (p / 'steamapps').is_dir()), roots[0].resolve())
common = steam / 'steamapps/common'
fex = common / 'FEX-Emu/fex-compat-tool'
runtime = common / 'SteamLinuxRuntime_4/_v2-entry-point'
proton = common / 'Proton - Experimental/proton'
eac = common / 'Proton EasyAntiCheat Runtime'
for label, path in [('FEX-Emu', fex), ('Steam Linux Runtime 4.0', runtime),
('Proton Experimental', proton), ('Proton EasyAntiCheat Runtime', eac)]:
if not path.exists():
raise ValueError(f'Missing {label}. Install it in Steam on the default SteamOS drive, then retry.')
for wine in [proton.parent / 'files/bin/wine64', proton.parent / 'files/bin/wine']:
if wine.is_file():
with wine.open('rb') as stream:
header = stream.read(20)
if header[:4] == b'\x7fELF' and header[5:6] == b'\x01' and int.from_bytes(header[18:20], 'little') == 183:
raise ValueError('This is ARM64 Proton. Install standard x86-64 Proton Experimental instead.')
config = Path(inherited.get('XDG_CONFIG_HOME') or home / '.config')
database = config / 'legendary/installed.json'
try:
game = Path(json.loads(database.read_text())['Sugar']['install_path'])
except (OSError, ValueError, KeyError, TypeError):
raise ValueError('Rocket League is not registered as Sugar in Legendary. Complete its installation first.')
if not game.is_dir():
raise ValueError('The Rocket League install folder is missing. Check Legendary list-installed --show-dirs.')
prefix = home / '.local/share/rocket-epic-prefix-experimental'
environment = dict(inherited)
environment.update({
'STEAM_COMPAT_DATA_PATH': str(prefix),
'STEAM_COMPAT_CLIENT_INSTALL_PATH': str(steam),
'STEAM_COMPAT_INSTALL_PATH': str(game),
'PROTON_EAC_RUNTIME': str(eac),
'EAC_LAUNCHERDIR': str(prefix / 'pfx/drive_c/users/steamuser/AppData/Roaming/EasyAntiCheat'),
'FEX_NEEDSSECCOMP': '1', 'PROTON_USE_XALIA': '0',
'PROTON_LOG': '0', 'WINEDEBUG': '-all',
'SteamAppId': '0', 'SteamGameId': '0', 'STEAM_COMPAT_APP_ID': '0',
})
chain = [str(fex), 'run', '--', str(runtime), '--verb=waitforexitandrun', '--']
if arguments == ['--check']:
return None, environment, game, prefix
if arguments == ['--probe']:
command = chain + ['/usr/bin/uname', '-m']
elif arguments:
command = chain + [str(proton), 'waitforexitandrun'] + arguments
else:
raise ValueError('Launch through Legendary, or use --check / --probe for setup checks.')
return command, environment, game, prefix
def main():
if sys.argv[1:] == ['--launch']:
legendary = Path.home() / '.local/share/legendary-env/bin/legendary'
if not legendary.is_file():
print('Install Legendary using Step 10 first.', file=sys.stderr)
return 1
wrapper = shlex.join([sys.executable, str(Path(__file__).resolve())])
os.execv(str(legendary), [str(legendary), 'launch', 'Sugar', '--no-wine', '--wrapper', wrapper, '-dx11'])
return 0
try:
command, environment, game, prefix = prepare(Path.home(), sys.argv[1:], os.environ)
except ValueError as error:
print(f'Setup check: {error}', file=sys.stderr)
return 1
if command is None:
print('Setup paths found.')
return 0
prefix.mkdir(parents=True, exist_ok=True)
# Legendary selects the executable's working directory. Preserve it so
# relative game/DLL paths behave as they do in its standard launch.
os.execve(command[0], command, environment)
if __name__ == '__main__':
raise SystemExit(main())
PY
chmod 700 "$HOME/rocket-proton-wrapper.py"
Wait until the normal terminal prompt returns. If the terminal shows a > continuation prompt, the closing PY line has not been entered correctly; it must be on a line by itself with no spaces before it.
The helper detects common Steam root locations, reads Rocket League's install path from Legendary and creates a separate Proton prefix in ~/.local/share/rocket-epic-prefix-experimental. Keep the four Steam compatibility tools in the default SteamOS library as instructed in Step 5. Rocket League itself can be installed in another folder selected through Legendary. The helper preserves Legendary's working directory and leaves the installed game files alone. Its launch chain follows the public FEX→Steam Runtime→Proton arrangement; --no-wine tells Legendary that the wrapper handles Proton. FEX launch-chain explanation, Legendary wrapper options
Step 14 — Check the launcher
In Konsole:
python3 "$HOME/rocket-proton-wrapper.py" --check
Expected message:
Setup paths found.
Then check the FEX/runtime chain:
python3 "$HOME/rocket-proton-wrapper.py" --probe
The architecture result should be x86_64. Other startup messages may appear first.
If a tool is missing, return to Step 5, finish its download, and keep the tools on the default SteamOS drive. If the Rocket League installation is missing, return to Step 12.
Step 15 — Launch Rocket League
Keep Steam running. In Konsole, run:
python3 "$HOME/rocket-proton-wrapper.py" --launch
Allow the first launch time to prepare its Proton prefix. Leave Konsole open while playing.
Use this command each time you launch. It obtains fresh Epic launch authentication. Do not add--offlinefor online play, and do not launch RocketLeague.exe directly. Do not add VRChat-specific Steam launch options or substitute a different executable.
If the game asks you to accept its agreements or finish linking/signing in, complete those prompts in the game. Test Training → Free Play, then join an online match. Treat menu access, gameplay and a successful online match as separate checks.
Step 16 — Make a desktop shortcut
After the terminal launch works, paste this block into Konsole:
Double-click Rocket League on the SteamOS desktop. If KDE asks whether to trust or execute the shortcut, review it and allow it. Steam should remain running.
After Steam updates FEX-Emu: close games and reinstall the staged patched build:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh
sh install-fex-tool.sh status
Restore Valve's original FEX if needed:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh restore
Keep ~/steamac-fex-setup and ~/fex-eac-work; the latter contains the staged build and backup. The public FEX instructions explain that Steam tool updates can overwrite the patched installation. FEX maintenance instructions
Troubleshooting — Find the matching symptom
syntax error near unexpected token '(': A library listing or explanatory text was pasted as a command. Press Ctrl+C, then paste only the relevant command block.
uv: command not found: Use the Python virtual-environment installation in Step 10; it does not require a uvcommand.
legendary: command not found: Use the full "$HOME/.local/share/legendary-env/bin/legendary"path shown in this guide.
Exec format error after downloading a Linux AppImage: Remove that AppImage from this procedure and use Step 10's Python installation inside SteamOS.
Epic login ends on a page with JSON or a redirect: Return the authorizationCode value to Legendary's prompt, as explained in Step 11.
Sugar is missing from the account: Confirm the Epic account and add Rocket League to its Epic library; rerun legendary list using the full command path.
Missing FEX, Proton or runtime path: Finish Step 5 downloads in the default SteamOS library. The ARM64 runtime is not the x86 runtime used here.
Helper reports ARM64 Proton: Install the standard x86-64 Proton Experimental listed in Step 5, rather than an ARM64 variant.
FEXServer running during installation: Close games, restart the VM and install patched FEX before starting another game.
VM says disk full while the Mac has free space: On the Mac choose FX Steam Launcher → Settings → Advanced → Grow Disk…, enlarge the existing home area, and let it restart. Do not recreate the disk.
White/black window or graphical corruption: Finish downloads, keep the built-in Vulkan path, and verify Proton Experimental's files in Steam → tool Properties → Installed Files. Restart the VM before retrying.
Game opens but cannot connect online: Close it, repeat Epic authentication, update/verify Sugar, then use Step 15 without --offline. Record the game's exact error if it persists.
Missing MSVCP140.dll or VCRUNTIME140.dll: Follow the prerequisite step below.
Optional repair — Install Microsoft's Visual C++ runtime
Use this only if the game reports missing Visual C++ runtime DLLs. Close Rocket League, then run in Konsole:
I've been building VeRantyx, which lets you play Windows PC VR games on an Apple Silicon Mac.
I started it in May, paused for five months, and picked it back up recently.
The latest version ("vxrt") uses no Wine: the Windows game and the real Windows SteamVR run on
VXRuntime, a Windows runtime written from scratch for Apple Silicon, with its own Direct3D 11 →
Metal shader translator. Steam is the normal Mac Steam client with your own account.
Video: MacBook Pro M1 Max (left) vs MacBook Air M5 (right), both via the Vision Pro's ALVR app.
Full video: https://youtu.be/YwznYiAXqBg
This isn't a benchmark – the two recordings were made separately, so please look at how smooth
each one is, not loading times. Sorry it's mostly dark areas: I love games but I'm not very good
at them, and I've only reached Chapter 2.
Game frame rate from the logs:
- M1 Max (32-core GPU, 64 GB), 3K preset (1440×1620 per eye): ~50–55 fps
- M5 MacBook Air (10-core GPU, 24 GB), ALVR defaults: ~30 fps
Recommended settings:
- Pro/Max Macs: VERANTYX_ALVR=1 VXRT_VR_QUALITY=3k (Vision Pro app: VXRT_VR_QUALITY=3k, 60 fps on M1 Max)
- MacBook Air / base chips: VERANTYX_ALVR=1 with no preset. Heavier presets make the picture warp
when you turn your head (the headset shows 90 Hz and stretches older frames).
- 5 GHz Wi-Fi (80 MHz channel helps a lot)
Headsets: Vision Pro with its own app (hand tracking + Joy-Con, no PS VR2 controllers needed), or
any ALVR client – tested with the Vision Pro's ALVR app, with game audio and hand tracking.
** Quest owners: could you test it? ** I don't own a Quest, so it's untested there. It should work
(VeRantyx uses ALVR's open-source streaming core v20.14.1, unchanged, and Quest's ALVR client
speaks the same protocol), but I can't check controllers or buttons myself.
1. Install the ALVR client v20.x on the Quest (ALVR's GitHub releases or SideQuest)
2. On the Mac: scripts/setup_vxrt.sh (see README), then VERANTYX_ALVR=1 scripts/launch_vxrt_alyx.sh
(first start builds the ALVR part; needs Rust: https://rustup.rs)
3. Open ALVR on the Quest on the same 5 GHz Wi-Fi – it connects by itself
Please tell me your Mac and Quest model, and what works (picture, tracking, controllers, buttons,
audio). If something fails, attach ~/Library/Application Support/VeRantyx/ALVR/session_log.txt.
No haptics yet; USB is untested (use Wi-Fi).
Runs: Half-Life: Alyx, The Lab, Google Earth VR. Not yet: Direct3D 12, Vulkan, most other titles;
anti-cheat is never worked around. You need your own SteamVR and games – nothing from Valve or
Microsoft is included.
Hi, I am solo-developing Knights of Frontier Valley, a low-fantasy RPG with gridless tactical combat, deep character customization, complex NPC behavior, and procedural world building. You explore a new valley each game run, solve quests, make meaningful choices, and gain riches and glory while trying to stay alive.
The engine was written from scratch. All art is hand-made with no AI involved. Music was made by top composers including Kevin Manthei (Neverwinter Nights, Jagged Alliance 2, Wizardry 8...)
It's currently running native on Intel, and with no issues on Apple silicon through Rosetta. Once I receive my new MacMini, I'll look into a native Apple release.
The second Playtest just ended, but the Demo is coming out soon.