Wyn

Games

Satisfactory

Coffee Stain Publishing · Steam 526870 · Verified · Runs from the download

Results depend on your Mac, macOS, Wyn version, and game version. Read each profile’s notes before using it.

How to use or share a profile

Download the JSON to keep a copy of the launch settings. Your Wyn agent can inspect it and apply the profile. Test it on your Mac before treating it as compatible.

To contribute an improvement, choose “Improve this profile”, update the settings and notes, then submit for review. Uploading here does not change your installed Wyn profiles.

satisfactory

Verified Download JSON Improve this profile
Layer
D3DMetal
Windows
win10
Sync
msync
DXVK
false
AVX
false
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-NO_EOS_OVERLAY -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

CORRECTED 15 Sep 2026 -- two claims below are wrong: 'AVX IS THE FOURTH KNOB AND IT IS WHAT MAKES IN-WORLD PLAY SURVIVE' and 'Everything else here is a working configuration'. (1) avxEnabled false never reached the game. Every Satisfactory launch log in ~/Library/Logs/com.fly.gaming from 12 Sep 10:55Z to 13 Sep 23:09Z -- including the 12 Sep runs credited below -- carries ROSETTA_ADVERTISE_AVX=1. The bottle stores avxEnabled true, and BottleSettings.environmentVariables only ever adds that variable, so the profile's false leaves the bottle's =1 in place. The settingsFingerprint changes; the environment does not. (2) The game crashes early with AVX genuinely off (bottle set false by hand). 26 controlled launches on 14-15 Sep 2026, 11 died within ~21 s of the world loading, and no change moved the rate: shipped settings 3/8, D3DM_MULTITHREADED_INTERFACE_ENABLE=1 3/8, CA_DEBUG_TRANSACTIONS=1 1/2, without -USEALLAVAILABLECORES 2/3, D3DM_RETAIN_REFERENCES=1 1/3, -VSYNC 1/2. (3) What is measured about the crash: RHIThread, 15-21 s after 'Load map complete', faulting inside macOS thread-ownership checks -- libsystem_platform os_unfair_lock_assert_owner.cold.1 (7) and _os_unfair_lock_unowned_abort (2), libobjc AutoreleasePoolPage::releaseUntil (1), libsystem_pthread pthread_setspecific (1). Three more launches exited 3-6 s after load with no record anywhere. CA_DEBUG_TRANSACTIONS=1 logs D3DMetal's DXGISwapChain::Present1 and swapchain creation (libd3dshared WineSwapchainCallbacks::InitializeForHWND) changing CAMetalLayer off the main thread. Solarpunk hit the same trap on 6 Sep. Treat it as a D3DMetal bug, not a profile setting; the Apple Feedback draft is in ~/wyn-handovers/apple-feedback-20260915/. (4) The MENU DEATH section's 'likelier cause is the same AVX SIGILL' is withdrawn: silent deaths recur with AVX off. Status stays verified pending the owner's decision. With ~40% early crashes, the section 5 'no crash directory' bar is not reliably met. CRASHES WHEN YOU QUIT. Play is fine; the exit is not. Leaving the game from its own menu tears down normally and then dies with a fatal allocator error instead of exiting cleanly. Nothing you did in the session is lost and it is not a launch failure — see EXIT CRASH below. Everything else here is a working configuration. Launch args: -NO_EOS_OVERLAY -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720 (Steam LaunchOptions; was wrongly matched to -NOTEXTURESTREAMING earlier). D3DMetal 3.0. Crash-avoidance (not taste), and all FOUR knobs matter: MetalFX=0, D3DM_ENABLE_ASYNC_COMMIT=0, HUD off, and avxEnabled FALSE. MetalFX on crawls ~0.1-2 fps then RHIThread SIGILL in D3DMCommandQueue::ExecuteCommandLists; MetalFX off alone also SIGILL'd. wyn play waits 120s after quit (D3DMetal GPU settle). Leftover CrashReportClient does not block Play once the game EXE is gone. AVX IS THE FOURTH KNOB AND IT IS WHAT MAKES IN-WORLD PLAY SURVIVE, measured 12 Sep 2026. With avxEnabled true the game loads Persistent_Level and then dies the moment you move: EXCEPTION_ILLEGAL_INSTRUCTION 32s in, callstack through FactoryGameSteam-RenderCore, UECC dump written. The faulting address 0x00007ff805ba1deb is outside every one of the 526 PE modules in that dump (they live at 0x140000000 and 0x6fffc6f9....-0x6ffffffe1....), so the illegal instruction is in native Rosetta-translated code, not in the game's x86 image; the minidump captures no code pages there, so the instruction itself cannot be read. Mechanism is in Wyn's own guidance: avxEnabled sets ROSETTA_ADVERTISE_AVX=1 (BottleSettings.swift) and binaries then emit AVX. With avxEnabled false a person played and moved in-world: zero illegal-instruction mentions in the log, no crash directory, adapter AMD Compatibility Mode / VendorId 1002, frame #4658. The bottle itself stores avxEnabled true (ensureSteamBottle sets it when creating one), so the profile override is doing the work via ProfileApplicator.launchSettings; settingsFingerprint goes d326edcc9913c14f -> ebe75d3faab5d10f when it applies, which is how to tell that it did. EXIT CRASH, unfixed and deterministic. Quitting from the in-game menu tears down in order (online services, Steam API unload, FFX/FSR/DLSS module shutdown, EOS_Shutdown EOS_Success) and then the process dies: FMallocBinned2 Attempt to realloc an unrecognized block 0000000003C30000, canary == 0x0 != 0xe3 (MallocBinned2.cpp:900). Heap corruption on exit, not OOM. Same block address on both 12 Sep occurrences, so reproducible rather than random. No crash directory is written despite the fatal error. It costs nothing in play, but it means no LogExit: Exiting. -- this profile meets loaded map, frame count and adapter on the §5 bar and FAILS clean exit. Verified is kept deliberately, with that gap stated here rather than hidden. Undiagnosed. Do not read it as a launch failure. MENU DEATH AT ~33s, 12 Sep 2026 -- and do not trust the first explanation of it. No LogExit, no UE crash handler, no macOS crash report, and the log's last line is a crawl in its own numbers: TicksCount=[421] ExpectedTicksCount=[1000]. It was blamed on an already-running Steam client handing the game gameHostSteamEnvironment's D3DM_ENABLE_METALFX=1 default over this profile's 0. That mechanism is real on the -applaunch path and SteamLauncher+SessionEnv.swift fixes it THERE, but this title never takes that path: a d3dmetal profile goes through launchGameDirectD3DMetal, which starts the game EXE directly with the profile's own environment, so there is no client environment to inherit. The inheritance story was never proved for this title. The likelier cause is the same AVX SIGILL, hit before anything could be written. Treat it as unexplained.

Environment

WINEDLLOVERRIDESd3d11,dxgi,d3d12,d3d10,atidxx64,nvapi64,nvngx=b
MTL_HUD_ENABLED0
D3DM_SHOW_HUD_STATS0
D3DM_ENABLE_METALFX0
D3DM_ENABLE_ASYNC_COMMIT0

Agents: GET /api/v1/profiles/satisfactory.json or GET /api/v1/games/satisfactory.json.

satisfactory-dxmt

Guessed Download JSON Improve this profile
Layer
DXMT
Windows
win10
Sync
msync
DXVK
false
AVX
true
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

DOES NOT RUN ON DXMT, AND THAT IS NOW MEASURED RATHER THAN SUSPECTED. Re-tested 13 Sep 2026: the 5 Aug rejection is CONFIRMED, not overturned. Use the `satisfactory` (D3DMetal) profile to play. Do not re-run this to find out; re-run it only if the mechanism below changes. WHAT WAS MEASURED, 13 Sep 2026, Apple M4, macOS 26.5.1 (25F80). `wyn play satisfactory-dxmt` -> steam.exe -applaunch 526870, Wyn printing "Graphics layer: DXMT". The game reached D3D11 init and died about one second later: RHIThread crash, `Assertion failed: IsSet() [Optional.h:362]`, callstack TOptional<FD3D11DynamicRHI::FTimestampCalibration>::operator->() -> FD3D11DynamicRHI::PollQueryResults() [D3D11Query.cpp:301]. No menu, no map, no frames. It is a startup crash, not a black screen and not a hang. AND IT REALLY WAS DXMT THIS TIME, which is exactly what the August run could not show. Three independent checks agreed: the log's `Chosen D3D11 Adapter` block reads Apple M4 / VendorId 106b (D3DMetal reads AMD Compatibility Mode / 1002); lsof on the live FactoryGameSteam-Win64-Shipping.exe mapped winemetal.so, winemetal.so.aot and winemetal.dll and NO libd3dshared.dylib; and wyn play reported the layer itself. The DXMT payload at Libraries.dxmt-wine11.0/DXMT/x64 is native PE at offset 0x40, so the -Dwine_builtin_dll=true hazard that made the August result untrustworthy does not apply to this run. THE MECHANISM IS A DXMT CAPABILITY GAP, NOT A SATISFACTORY BUG. DXMT does not supply timestamp calibration, so UE's D3D11 query path dereferences an unset TOptional the first time it polls. What would change this answer: DXMT answering GetTimestampCalibration, or UE tolerating its absence. Re-test then, and not before. STALE PER-EXE OVERRIDES DID NOT FAKE THIS. The bottle carries AppDefaults\factorygame*.exe\DllOverrides with atidxx64, d3d10, d3d11, d3d12 and dxgi all "=b", left by past D3DMetal runs. solarpunk.exe carries the identical set and still measured as true DXMT on 6 Sep, so this profile's WINEDLLOVERRIDES=dxgi,d3d11,d3d10core=n,b wins over the registry. Environment beats AppDefaults on this stack; that is why the layer can be chosen per launch without rewriting the bottle. TWO LOGS LIVE IN THIS PREFIX AND THE WRONG ONE WILL MISLEAD YOU. drive_c/users/crossover/AppData/Local/FactoryGame/Saved/Logs/FactoryGame.log is stale - its last entry is 12 Sep, the MallocBinned2 quit-crash that belongs to the D3DMetal profile. The live one is under drive_c/users/ebenoelofse/. `wyn play` flags the stale one before launching; believe it. ORIGINAL 5 AUG NOTE, NOW CONFIRMED: DXMT loads Apple M4 FL11_1 then RHIThread assert TOptional<FTimestampCalibration> unset (UE D3D11RHI), Factory Crash Reporter. It was measured against the June DXMT, whose DLLs were built with meson's wine_builtin_dll default of true - stamped "Wine builtin DLL" at offset 0x40, which makes Wine's load_builtin() rewrite =n,b into =b,n and hand back D3DMetal - so it demanded a re-test before being trusted. The re-test agrees with it. Solarpunk failed the same way in June and then ran clean on a v0.80 build made with -Dwine_builtin_dll=false (6 Sep, see solarpunk-dxmt); that recovery does not generalise to this title.

Environment

WINEDLLOVERRIDESdxgi,d3d11,d3d10core=n,b
MTL_HUD_ENABLED0

Agents: GET /api/v1/profiles/satisfactory-dxmt.json or GET /api/v1/games/satisfactory.json.

satisfactory-esync

Guessed Download JSON Improve this profile
Layer
D3DMetal
Windows
win10
Sync
esync
DXVK
false
AVX
true
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-NO_EOS_OVERLAY -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

Science (6 Aug): freeze Time Profiler dominated by msync_wait_objs. A/B esync-only (no WINEMSYNC).

Environment

WINEDLLOVERRIDESd3d11,dxgi,d3d12,d3d10,atidxx64,nvapi64,nvngx=b
MTL_HUD_ENABLED0
D3DM_ENABLE_METALFX0
D3DM_SHOW_HUD_STATS0

Agents: GET /api/v1/profiles/satisfactory-esync.json or GET /api/v1/games/satisfactory.json.

satisfactory-nomp

Guessed Download JSON Improve this profile
Layer
D3DMetal
Windows
win10
Sync
msync
DXVK
false
AVX
true
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-NO_EOS_OVERLAY -NoMultiplayer -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

Science (6 Aug): Instruments freeze showed FGClientQuerySocketThread in NtWait/msync. -NoMultiplayer disables EOS multiplayer per Coffee Stain FAQ — test if that removes the waiter.

Environment

WINEDLLOVERRIDESd3d11,dxgi,d3d12,d3d10,atidxx64,nvapi64,nvngx=b
MTL_HUD_ENABLED0
D3DM_ENABLE_METALFX0
D3DM_SHOW_HUD_STATS0

Agents: GET /api/v1/profiles/satisfactory-nomp.json or GET /api/v1/games/satisfactory.json.

satisfactory-nosync

Guessed Download JSON Improve this profile
Layer
D3DMetal
Windows
win10
Sync
none
DXVK
false
AVX
true
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-NO_EOS_OVERLAY -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

Science (6 Aug): freeze in msync/server waits. A/B with enhancedSync none (neither WINEMSYNC nor WINEESYNC).

Environment

WINEDLLOVERRIDESd3d11,dxgi,d3d12,d3d10,atidxx64,nvapi64,nvngx=b
MTL_HUD_ENABLED0
D3DM_ENABLE_METALFX0
D3DM_SHOW_HUD_STATS0

Agents: GET /api/v1/profiles/satisfactory-nosync.json or GET /api/v1/games/satisfactory.json.

satisfactory-perf

Guessed Download JSON Improve this profile
Layer
D3DMetal
Windows
win10
Sync
msync
DXVK
false
AVX
true
Executables
factorygamesteam.exe, factorygame.exe, factorygamesteam-win64-shipping.exe, factorygame-win64-shipping.exe
Winetricks
vcrun2019, vcrun2022
Launch args
-NO_EOS_OVERLAY -dx11 -USEALLAVAILABLECORES -Nosplash -ResX=1280 -ResY=720
Unreal project
FactoryGame

Notes

Same launch args as satisfactory plus ASYNC_COMMIT. Sit still 60s after navmesh quiet; Metal HUD. After: Tools/analyze-satisfactory-perf.sh.

Environment

WINEDLLOVERRIDESd3d11,dxgi,d3d12,d3d10,atidxx64,nvapi64,nvngx=b
MTL_HUD_ENABLED0
D3DM_ENABLE_METALFX0
D3DM_SHOW_HUD_STATS0
D3DM_ENABLE_ASYNC_COMMIT0

Agents: GET /api/v1/profiles/satisfactory-perf.json or GET /api/v1/games/satisfactory.json.