Skip to content

Commit e904ecd

Browse files
authored
[UI] Add WoW64 toggle on Linux non-native games (#4831)
1 parent 1ebfd70 commit e904ecd

File tree

8 files changed

+62
-2
lines changed

8 files changed

+62
-2
lines changed

public/locales/en/translation.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,8 @@
393393
"part2": "For other places, use a symbolic link to one of these folders"
394394
},
395395
"wine-hdr": "HDR enhances colors by providing brighter highlights and deeper contrasts. For HDR to work, both the display and the game must support it.",
396-
"wine-wayland": "The Wine-Wayland experimental driver allows games to run natively under the Wayland display protocol. Enabling might break some games."
396+
"wine-wayland": "The Wine-Wayland experimental driver allows games to run natively under the Wayland display protocol. Enabling might break some games.",
397+
"WoW64": "The Wine WoW64 mode allows 32-bit Windows games to be run on 64-bit Wine. Enabling may improve performance, but could also break older 32-bit games."
397398
},
398399
"info": {
399400
"heroic": {
@@ -803,7 +804,8 @@
803804
"winecrossoverbottle": "CrossOver Bottle",
804805
"wineprefix": "WinePrefix folder",
805806
"wineversion": "Wine Version",
806-
"wineWayland": "Enable Wine-Wayland (Experimental) (Wine version needs to support it)"
807+
"wineWayland": "Enable Wine-Wayland (Experimental) (Wine version needs to support it)",
808+
"WoW64": "Enable WoW64 (Experimental)"
807809
},
808810
"settings": {
809811
"advanced": {

src/backend/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ class GlobalConfigV0 extends GlobalConfig {
352352
enableMsync: isMac,
353353
enableWineWayland: false,
354354
enableHDR: false,
355+
enableWoW64: false,
355356
eacRuntime: isLinux,
356357
battlEyeRuntime: isLinux,
357358
framelessWindow: false,

src/backend/game_config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class GameConfigV0 extends GameConfig {
216216
enableFsync,
217217
enableWineWayland,
218218
enableHDR,
219+
enableWoW64,
219220
maxSharpness,
220221
launcherArgs,
221222
nvidiaPrime,
@@ -254,6 +255,7 @@ class GameConfigV0 extends GameConfig {
254255
enableFsync,
255256
enableWineWayland,
256257
enableHDR,
258+
enableWoW64,
257259
maxSharpness,
258260
launcherArgs,
259261
nvidiaPrime,

src/backend/launcher.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ function filterGameSettingsForLog(
373373
delete gameSettings.enableFSR
374374
delete gameSettings.enableWineWayland
375375
delete gameSettings.enableHDR
376+
delete gameSettings.enableWoW64
376377
delete gameSettings.showFps
377378
delete gameSettings.enableDXVKFpsLimit
378379
delete gameSettings.eacRuntime
@@ -391,6 +392,7 @@ function filterGameSettingsForLog(
391392
delete gameSettings.enableFSR
392393
delete gameSettings.enableWineWayland
393394
delete gameSettings.enableHDR
395+
delete gameSettings.enableWoW64
394396
delete gameSettings.showMangohud
395397
delete gameSettings.disableUMU
396398
delete gameSettings.useSteamRuntime
@@ -434,6 +436,7 @@ function filterGameSettingsForLog(
434436
delete gameSettings.enableFsync
435437
delete gameSettings.enableWineWayland
436438
delete gameSettings.enableHDR
439+
delete gameSettings.enableWoW64
437440
delete gameSettings.enableDXVKFpsLimit
438441
delete gameSettings.DXVKFpsCap
439442
delete gameSettings.autoInstallDxvk
@@ -1182,6 +1185,13 @@ function setupWineEnvVars(gameSettings: GameSettings, gameId = '0') {
11821185
}
11831186
}
11841187
}
1188+
if (isLinux && gameSettings.enableWoW64) {
1189+
if (wineVersion.type === 'proton') {
1190+
ret.PROTON_USE_WOW64 = '1'
1191+
} else {
1192+
ret.WINEARCH = 'wow64'
1193+
}
1194+
}
11851195
if (wineVersion.type === 'proton') {
11861196
if (gameSettings.autoInstallDxvkNvapi) {
11871197
ret.PROTON_ENABLE_NVAPI = '1'

src/common/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ export interface GameSettings {
202202
enableFsync: boolean
203203
enableWineWayland: boolean
204204
enableHDR: boolean
205+
enableWoW64: boolean
205206
gamescope: GameScopeSettings
206207
enviromentOptions: EnviromentVariable[]
207208
ignoreGameUpdates: boolean
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { useContext } from 'react'
2+
import { useTranslation } from 'react-i18next'
3+
import { ToggleSwitch } from 'frontend/components/UI'
4+
import useSetting from 'frontend/hooks/useSetting'
5+
import ContextProvider from 'frontend/state/ContextProvider'
6+
import SettingsContext from '../SettingsContext'
7+
import InfoIcon from 'frontend/components/UI/InfoIcon'
8+
9+
const EnableWoW64 = () => {
10+
const { t } = useTranslation()
11+
const { platform } = useContext(ContextProvider)
12+
const { isLinuxNative } = useContext(SettingsContext)
13+
const isLinux = platform === 'linux'
14+
const [enableWoW64, setEnableWoW64] = useSetting('enableWoW64', false)
15+
16+
if (!isLinux || isLinuxNative) {
17+
return <></>
18+
}
19+
20+
return (
21+
<>
22+
<div className="toggleRow">
23+
<ToggleSwitch
24+
htmlId="WoW64Toggle"
25+
value={enableWoW64 || false}
26+
handleChange={() => setEnableWoW64(!enableWoW64)}
27+
title={t('setting.WoW64', 'Enable WoW64 (Experimental)')}
28+
/>
29+
30+
<InfoIcon
31+
text={t(
32+
'help.WoW64',
33+
'The Wine WoW64 mode allows 32-bit Windows games to be run on 64-bit Wine. Enabling may improve performance, but could also break older 32-bit games.'
34+
)}
35+
/>
36+
</div>
37+
</>
38+
)
39+
}
40+
41+
export default EnableWoW64

src/frontend/screens/Settings/components/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export { default as EnableFSR } from './EnableFSR'
2828
export { default as EnableMsync } from './EnableMsync'
2929
export { default as EnableFsync } from './EnableFsync'
3030
export { default as EnableWineWayland } from './EnableWineWayland'
31+
export { default as EnableWoW64 } from './EnableWoW64'
3132
export { default as Gamescope } from './Gamescope'
3233
export { default as EnvVariablesTable } from './EnvVariablesTable'
3334
export { default as ExperimentalFeatures } from './ExperimentalFeatures'

src/frontend/screens/Settings/sections/GamesSettings/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
EnableFsync,
1818
EnableMsync,
1919
EnableWineWayland,
20+
EnableWoW64,
2021
EnvVariablesTable,
2122
GameMode,
2223
LauncherArgs,
@@ -189,6 +190,7 @@ export default function GamesSettings() {
189190
<EnableEsync />
190191
<EnableFsync />
191192
<EnableWineWayland />
193+
<EnableWoW64 />
192194
<EnableMsync />
193195
<AdvertiseAvxForRosetta />
194196
<EnableFSR />

0 commit comments

Comments
 (0)