Steam

steam proton notes

  • pressure vessel added in > 5.10
    • conflicting glibc version for bash link so had to revert/build custom
  • does not respect XDG vars

Lutris

  • installers battle.net

Protonfixes for some games

Link localfixes

(ignore-errors (let* ((proton-dir (concat (file-name-as-directory (xdg-config-home)) "protonfixes"))
                      (localfixes-dir (concat (file-name-as-directory proton-dir) "localfixes")))
  (if (not (or (file-exists-p localfixes-dir) (file-symlink-p localfixes-dir)))
      (progn (make-directory localfixes-dir 1)
             (set-file-modes localfixes-dir #o700)))
  (if (not (or (file-exists-p (concat (file-name-as-directory localfixes-dir) "7110.py"))
               (file-symlink-p (concat (file-name-as-directory localfixes-dir) "7110.py"))))
      (make-symbolic-link (concat (file-name-directory (or load-file-name buffer-file-name)) "7110.py")
                          (concat (file-name-as-directory localfixes-dir) "7110.py") 1))
  (if (not (or (file-exists-p (concat (file-name-as-directory localfixes-dir) "22380.py"))
               (file-symlink-p (concat (file-name-as-directory localfixes-dir) "22380.py"))))
      (make-symbolic-link (concat (file-name-directory (or load-file-name buffer-file-name)) "22380.py")
                          (concat (file-name-as-directory localfixes-dir) "22380.py") 1))
  ))

Jade Empire (process affinity)

""" Game fix Jade Empire: Special Edition
"""
#pylint: disable=C0103

import threading
import os
import subprocess
from protonfixes.logger import log

def _taskset():
    """Use taskset to set mask of JadeEmpire.exe"""
    # avoiding an external library as proc should be available on linux
    again = True
    badexes = ['JadeEmpire.exe']
    while again:
        pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
        for pid in pids:
            try:
                with open(os.path.join('/proc', pid, 'cmdline'), 'rb') as proc_cmd:
                    cmdline = proc_cmd.read()
                    for exe in badexes:
                        if exe in cmdline.decode():
                            mask = os.sched_getaffinity(pid)
                            while mask != {0} :
                                mask = os.sched_getaffinity(pid)
                            res = os.sched_setaffinity(pid, {0,1,2,3})
                            again = False
            except IOError:
                continue

@DeprecatedSince("5.0-3")
def main():
    """ Needs pid mask set on launch """
    thread = threading.Thread(target=_taskset, args=())
    thread.daemon = False
    thread.start()

Fallout New Vegas (audio/vk issues)

""" Game fix for Fallout: New Vegas
"""
# pylint: disable=C0103
from protonfixes import util
from protonfixes.protonversion import DeprecatedSince

@DeprecatedSince("5.0-3")
def main():
    """ Use D3D9, quartz for audio, disable AA & water reflections/refractions
    """
    # DX9 game
    util.disable_dxvk()

    # quartz for audio
    util.protontricks('quartz')

    # Graphics and HUD glitches when
    # AntiAliasing and Water Reflections/Refractions are enabled
    # https://github.com/ValveSoftware/Proton/issues/356
    user_opts = '''
    [Display]
    iMultiSample=0

    [Water]
    bUseWaterReflections=0
    bUseWaterRefractions=0
    '''
    util.set_ini_options(user_opts, 'My Games/FalloutNV/FalloutPrefs.ini')