Windows Game-Specific Fixes on macOS
Specific tweaks I've made to optimize my playing experience with certain games, including Skyrim Special Edition, Schedule I, Palworld, Far Cry 3, and more!
This is a companion to my article How to Run Windows Games and Programs on Mac.
This article is still a work in progress!
Palworld
I’ve tested with DXMT v0.61 (Wine 10.13) and GPTk 3.0 Beta 3 (Wine 7.7), and out of the two DXMT generally performed better than GPTk. The latter crashed on 2 separate occasions (which was annoying + required restarts) while the former played quite smoothly (no stuttering, v v rare lag) with minimal (fan) noise. This was tested without MetalFX tho. For DXMT, disable NVEXT (aka set DXMT_ENABLE_NVEXT=0). If enabled, in-world game in Palworld doesn’t appear (just a black screen and overlaid HUD, etc.).
This is if you want to convert/transfer a dedicated server to single-player (while keeping the same data, i.e. pals, items, character, etc.).1
Create a conda environment with Python 3.9 or higher and
palworld-save-tools1
conda create -n "palenv" python=3.12 palworld-save-tools
Activate new conda environment
1
conda activate palenv
Navigate to your server save, usually found in
$HOME/Games/drive_c/users/crossover/AppData/Local/Pal/Saved/SaveGames/YOUR_STEAM_ID/####(####is the save filename, which is a random 32-character string of letters and numbers;YOUR_STEAM_IDis your 17-digit Steam ID)1
cd $HOME/Games/drive_c/users/crossover/AppData/Local/Pal/Saved/SaveGames/YOUR_STEAM_ID/####
Make sure the aforementioned folder contains
Level.savandPlayersfolder with.savdata1
find -f Level.sav || find ./Players -name "*.sav"
Back up your save folder and store it in a safe place, just in case
Convert
Level.savto.json1
palworld-save-tools --to-json Level.savOpen the newly created
Level.sav.jsoninto your preferred text editor with a find and replace function (I use VSCode)Use ⌘ + F (i.e. CMD + F) to locate your server characters name; it’ll look similar to this:
Find where your name is and copy its
player_uidvalueUse ⌘ + F (i.e. CMD + F) again to find the
player_uidvalue you copied earlier and replace it with the following:1
00000000-0000-0000-0000-000000000001
Save the
.jsonConvert the
.jsonback to.sav1
palworld-save-tools --from-json Level.sav.jsonGo to
Playersfolder1
cd PlayersConvert the
.savfile that matches theplayer_uidvalue you copied earlier (PLAYER_UID_NO_HYPHENSis theplayer_uidvalue without hyphens) to.json1
palworld-save-tools --to-json PLAYER_UID_NO_HYPHENS.savOpen the newly created
.jsonfile into your preferred text editor with a find and replace function (I use VSCode)Use ⌘ + F (i.e. CMD + F) to replace all instances of your
player_uidvalue with the following:1
00000000-0000-0000-0000-000000000001
Save the
.jsonConvert the
.jsonback to.sav(PLAYER_UID_NO_HYPHENSis theplayer_uidvalue without hyphens)1
palworld-save-tools --from-json PLAYER_UID_NO_HYPHENS.sav.jsonRename the converted file to ensure that the game recognizes this
.savas the player’s (PLAYER_UID_NO_HYPHENSis theplayer_uidvalue without hyphens)1
mv PLAYER_UID_NO_HYPHENS.sav 00000000000000000000000000000001.savIf it isn’t there already, put the server save folder into your actual saves folder (i.e.
$WINEPREFIX/drive_c/users/crossover/AppData/Local/Pal/Saved/SaveGames/YOUR_STEAM_ID(YOUR_STEAM_IDis your 17-digit Steam ID)Deactivate your conda environment
1
conda deactivate
Optional: Delete your conda environment
1
conda env remove -n "palenv" -y && rm -rf "$(conda info --base)/envs/palenv"
Optional: If you’ve tested Palworld and everything runs fine, delete your backup save folder
The Elder Scrolls V: Skyrim Special Edition
You may encounter some launch issues/bugs with Game Porting Toolkit on Steam Client relating to window size, full-screen, and/or display resolution.
Open Windows version of Steam
Navigate to Skyrim Special Edition in your library
Click settings icon, then Properties
Enter the following in Launch Options (modify path if needed):
1
"C:\Program Files (x86)\Steam\steamapps\common\Skyrim Special Edition\SkyrimSE.exe" %command%
Close window
Open
SkyrimPrefs.iniSet these variables in
SkyrimPrefs.ini:1 2 3 4
bBorderless=1 bFull Screen=0 iSize H=1080 iSize W=1920
Update
iSize HandiSize W(i.e. integer variables representing1920x1080resolution) with your display’s height and width respectivelySave and close
SkyrimPrefs.ini
Schedule I
I’ve tested with DXMT v0.6 (works well but sometimes – once you quit the game – you get a grey screen), GPTk 3.0 Beta 3 (best option + most stable ime; no crashes or weird glitches/bugs, compared to the others), and DXVK + MoltenVK (works well but I think there’s a memory leak somewhere since it crashed. When I checked Activity Monitor, I found out 2 separate wine processes used 404+ GB of memory EACH (i.e. 808+ GB combined), iTerm was taking 404+ GB of memory and increasing to the point where they all paused, which doesn’t make sense. There’s more than just those 3. Terminal logging/debugging showed messaged [myk-warn] VK_ERROR_OUT_OF_POOL_MEMORY: VK_ERROR_OUT_OF_POOL_MEMORY: VkDescriptorPool exhausted pool of 6144 VK_DESCRIPTOR_TYPE_UNIFORM BUFFER_DYNAMIC descriptors, Allocating descriptor dynamically., so it’s presumably a MoltenVK bug).
Enable Retina (high resolution) mode
1
wine reg add 'HKEY_CURRENT_USER\Software\Wine\Mac Driver' /v 'RetinaMode' /t REG_SZ /d 'Y' /f
Adjust DPI scaling level (to offset/adjust high resolution-mode)
1
wine reg add 'HKEY_CURRENT_USER\Control Panel\Desktop' /v 'LogPixels' /t REG_DWORD /d 216 /f
Use/enable the following environment variables before running Steam
1
2
3
4
D3DM_SUPPORT_DXR=1
ROSETTA_ADVERTISE_AVX=1
WINEESYNC=1
WINEDLLOVERRIDES="dinput8=n,b;d3d11,d3d10,d3d12,dxgi=b"
Far Cry 3
Add to command line arg:
- Skip intro videos :
-skipintro - Max 60 FPS:
-RenderProfile_MaxFPS 60 - Prevent crashes:
WINE_LARGE_ADDRESS_AWARE=1 - Performance gain?:
WINECPUMASK=0xff - Possible audio fix:
export WINEDLLOVERRIDES="xaudio2_7=n,b"
1
WINE_LARGE_ADDRESS_AWARE=1 -skipintro -RenderProfile_MaxFPS 60 %command%
Info: Use DXMT v0.61. Audio is messed up. With maxed out settings: Super bad FPS (~5 FPS) + laggy during cutscenes / vids. Gameplay FPS (~20 FPS) is kinda better, but it still sucks.
Trying to fix Audio with this:
- Check Audio troubleshooting in Play Windows Games FC3 (App ID:
220240) now requires Installmfc100.dll, which can be installed with protontricks:protontricks 220240 mfc100. Might affect other games with Ubisoft Connect.
Mods
- Disable server msgs: https://www.nexusmods.com/farcry3/mods/276
- Restore Ubisoft Connect: https://www.nexusmods.com/farcry3/mods/234
- Solo offline co-op: https://www.nexusmods.com/farcry3/mods/262?tab=description
Enhancements
// todo Exit all Windows based programs.
Click Start, type regedit in the Search box, and then double-click regedit.exe from the results above. If you are prompted for an administrator password or confirmation,
type the password or provide confirmation.
Browse to and then click the following registry subkey:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers On the Edit menu, click New, and then select the following registry value from the drop-down menu specific to your version of Windows (32 bit, or 64 bit):
1
2
3
4
5
6
7
8
9
For 32 bit Windows
Select DWORD (32-bit) value.
Type TdrDelay as the Name and click Enter.
Double-click TdrDelay and add 8 for the Value data and click OK.
For 64 bit Windows
Select QWORD (64-bit) value.
Type TdrDelay as the Name and click Enter.
Double-click TdrDelay and add 8 for the Value data and click OK.
Close the registry editor and then restart your computer for the changes to take effect.
Enable retina mode:
1
2
wine reg add 'HKEY_CURRENT_USER\Software\Wine\Mac Driver' /v 'RetinaMode' /t REG_SZ /d 'Y' /f
wine reg add 'HKEY_CURRENT_USER\Control Panel\Desktop' /v 'LogPixels' /t REG_DWORD /d 254 /f # Calc PPI: https://dpi.lv I use 254dpi for my 3024x1512 res monitor.
Disable Wine border decoration: wine reg add 'HKEY_CURRENT_USER\Software\Wine\Mac Driver' /v 'Decorated' /t REG_SZ /d 'N' /f
Anti-aliased fonts (???).
Modify + lock GamerProfile.xml (in $HOME/Documents/My Games/Far Cry 3) to adjust game settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<GamerProfile>
<SoundProfile
MusicEnabled="1"
MasterVolume="100"
MicEnabled="1"
IncomingVoiceEnabled="1"
Language="English"
/>
<RenderProfile
MSAALevel="4"
AlphaToCoverage="2"
SSAOLevel="1"
SDSM="0"
ResolutionX="3024"
ResolutionY="1964"
Quality="custom"
QualityEditor="editor_ps3"
Fullscreen="1"
Borderless="1"
UseD3D11="1"
D3D11MultithreadedRendering="1"
WidescreenLetterbox="0"
UseWidescreenFOV="1"
FOVScaleFactor="1"
EnableSubResolution="0"
SubResolutionX="960"
SubResolutionY="540"
VSync="1"
RefreshRate="0"
DisableMip0Loading="0"
GPUMaxBufferedFrames="3"
ShowFPS="0"
Brightness="1"
Contrast="1"
GammaRamp="1"
AllowAsynchShaderLoading="1"
Bloom="1"
MaxFPS="60"
GrassWindMin="0.4"
GrassWindMax="2"
DisableParticles="0">
<CustomQuality>
<quality
ResolutionX="2560"
ResolutionY="1600"
EnvironmentQuality="high"
AntiPortalQuality="default"
PortalQuality="medium"
PostFxQuality="low"
TextureQuality="high"
TextureResolutionQuality="high"
WaterQuality="high"
DepthPassQuality="high"
VegetationQuality="high"
TerrainQuality="high"
GeometryQuality="high"
AmbientQuality="high"
DeferredAmbientQuality="high"
ShadowQuality="high"
EditorQuality=""
Hdr="1"
HdrFP32="0"
ReflectionHdr="1"
EnableVertexBinding="1"
id="custom"
/>
</CustomQuality>
<Post>
<quality
id="high"
GameDepthOfField="0"
MotionBlur="1"
FXAALevel="1"
CinematicDepthOfField="0"
SSAOMaxDistance="150"
CloudShadows="0"
DepthDownsample="1"
/>
</Post>
<Environment>
<quality
id="high"
RainNumSplashesPerSecond="15"
DisableRain="0"
/>
</Environment>
<Texture>
<quality
id="high"
TextureFilteringQuality="0"
/>
</Texture>
<Water>
<quality
id="high"
WaterReflectionQuality="4"
ReflectionTextureSizeX="2048"
ReflectionTextureSizeY="2048"
OceanRealReflection="1"
/>
</Water>
<Geometry>
<quality
id="high"
LodScale="0.5"
KillLodScale="0.5"
ClustersLodScale="1.0"
RealTreesLodScale="0.7"
/>
</Geometry>
<Shadow>
<quality
id="high"
ShadowMapSize="2048"
SoftShadows="1"
CascadedShadowMapSize="2048"
DisableShadow="0"
DisableShadowGeneration="0"
DisableShadowGenTerrain="0"
/>
</Shadow>
<Terrain>
<quality
id="high"
TerrainLodScale="0.5"
TerrainDetailViewDistance="512"
/>
</Terrain>
</RenderProfile>
<NetworkProfile
VoiceChatEnabled="0"
CustomMapMaxUploadRateInBitsOnline="10240000"
OnlineEnginePort="9000"
OnlineServicePort="9001"
FileTransferHostPort="9002"
FileTransferClientPort="9003"
LanHostBroadcastPort="9004"
LanClientBroadcastPort="9005"
ScanFreePorts="1"
ScanPortRange="1000"
ScanPortStart="9000"
SessionProvider=""
MaxUploadInbpsOnline="10240000">
<Accounts />
</NetworkProfile>
<GameProfile
Hour = "16"
Minutes = "40"
Seconds = "0"
TimeScale = "1"
WindForce = "80"
WindDir = "0"
DelayShadowMovement = "180"
IgnorePlayer = "0"
GatherEntitiesForMap = "0"
ShowAIInMap = "0"
ShowDiamondsInMap = "0"
DifficultyLevel = "1"
Machete = "0"
UseAimingHelpers = "0"
HelpCrosshair = "1"
/>
<ProfileSpecificGameProfile
Sensitivity="1"
Invert_x="0"
Invert_y="0"
DefaultFlickFireDirection_y="0"
UseMouseSmooth="1"
Smoothness="0.2"
Smoothness_Ironsight="0.2"
HelpCrosshair="1"
Gamepad_vibration="1"
UseRoadSignHilight="1"
UseSubtitles="1"
TaggingEnabled="1"
WikiUpdatedEnabled="1"
CollectibleUpdatedEnabled="1"
TutorialUpdatedEnabled="1"
ObjectiveReminderEnabled="1"
CraftingTipsEnabled="1"
DisplayXPEnabled="1"
DetectionIndicatorEnabled="1"
HitIndicatorEnabled="1"
GrenadeIndicatorEnabled="1"
UseAmbx="0"
UseGamePad="1"
GamepadAnswered="1"
Autosave="1"
Machete="0"
IronsightToggleMode="1">
<FireConfig
QualitySetting="High"
/>
</ProfileSpecificGameProfile>
<RealTreeProfile
Quality="High"
/>
<EngineProfile>
<PhysicConfig
QualitySetting="High"
/>
<QcConfig
GatherFPS="1"
GatherAICnt="1"
GatherDialogs="0"
IsQcTester="0"
/>
<InputConfig />
<ZoneConfig />
</EngineProfile>
<UplayProfile
LockString=""
/>
</GamerProfile>
The Elder Scrolls IV: Oblivion Remastered
Warning: System OS is older than Windows 10 20H2
Continue reading this section if you get a popup like this when launching a game
1
2
3
Sorry, your system does not meet the minimum requirements to play TESIV: Oblivion (Remastered). Click OK to proceed the launch, but it could run with issues.
- OS (Your system OS is older than Windows 10 20H2, please consider to upgrade your system)
Switch architecture
1
arch -x86_64 /bin/bash
Open
regedit1
WINEPREFIX=$HOME/Games wine regedit
Navigate to
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion- Make sure
ProductNamesaysMicrosoft Windows 10 - Make sure
CurrentVersionsays10.0 - Double-click
CurrentBuildto change its value Under
Value data:, enter19045, then click OK- Double-click
CurrentBuildNumberto change its value - Under
Value data:, enter19045, then click OK Right-click anywhere that isn’t a key (i.e. right-click anywhere in the white space) and navigate to New
- Click String Value
Input
ReleaseId, then press Enter to save its nameTo rename a key, right-click it and click Rename
- Double-click
ReleaseIdkey to set its value - Under
Value data:, enter22H2, then click OK Right-click and navigate to New
- Click String Value
- Input
DisplayVersion, then press Enter to save its name - Double-click
DisplayVersionkey to set its value - Under
Value data:, enter22H2, then click OK - Right-click and navigate to New
- Click DWORD Value
- Input
UBR, then press Enter to save its name Double-click
UBRkey to set its value- Select Decimal under
Base - Under
Value data:, enter2965, then click OK - Close
regedit
The popup should no longer appear since we’re spoofing the OS version to 21H2 (i.e. its minimum requirement).
Crashing during initial shader compilation
Upon first startup, there’s a really common bug where the game will crash during initial shader compilation. This can be pretty annoying, but there are some tweaks you can make, depending on your hardware.
Quit Steam once Oblivion Remastered crashes
Clear its D3DMetal shader cache
1
rm -r $(getconf DARWIN_USER_CACHE_DIR)/d3dm/OblivionRemastered-Win64-Shipping.exe/shaders.cache
Restart your computer
Delete your
Engine.inifile, if you modified itRelaunch Steam with raytracing disabled
1
WINEPREFIX=$HOME/Games WINEDEBUG=-all WINEDLLOVERRIDES="d3d11,dxgi=n,b" MTL_HUD_ENABLED=0 WINE_LARGE_ADDRESS_AWARE=1 D3DM_SUPPORT_DXR=0 WINEESYNC=1 wine "C:\Program Files (x86)\Steam\steam.exe"
Navigate to Oblivion: Remastered
Add the following to the launch options
1
%command% -safemode -noshaders -windowed -batchmode -nographics
Close launch options and launch game
Miscellaneous
Edit Engine.ini to disable Lumen/Nanite (i.e. hardware-accelerated ray tracing)
1
2
3
[SystemSettings]
r.Lumen.DiffuseIndirect.Allow=0
r.Nanite.MaxPixelsPerEdge=0
Ghost of Tsushima
IMPORTANT: As of macOS Sequoia 15.4+, Apple added support for F16C and BMI instructions in Rosetta 2. As such, this patch may no longer be necessary (for those with this update). Before running the original (i.e. non-patched) version, include
ROSETTA_ADVERTISE_AVX=1in the launch parameters to activate the instructions.
Error when launching the game via Steam that says:
This game requires a CPU that supports F16C instructions.
Download patch for 1053.7.809.1937 game version to the directory containing
GhostOfTsushima.exe(e.g.~/Games/drive_c/Program Files (x86)/Steam/steamapps/common/Ghost of Tsushima DIRECTOR'S CUT)Rename the original
GhostOfTsushima.exefile to something else (e.g.GhostOfTsushima_original.exe)Rename the recently downloaded patch to
GhostOfTsushima.exe





