예제 #1
0
def main():
    """ Uses winetricks to install the icodecs verb
    """

    log('Applying fixes for realMyst')

    util.protontricks('icodecs')
예제 #2
0
def main():
    """ Uses winetricks to install the ole32 verb
    """

    log('Applying fixes for Forts')

    util.protontricks('ole32')
예제 #3
0
def main():
    """ Install vcrun2015
    """

    log('Applying fixes for Doom 2016')

    # https://github.com/ValveSoftware/Proton/issues/788#issuecomment-416651267
    util.protontricks('vcrun2015')
예제 #4
0
def main():
    """ Installs corefonts
    """

    log('Applying fixes for You Need a Budget 4')

    # https://github.com/ValveSoftware/Proton/issues/7
    util.protontricks('corefonts')
예제 #5
0
def main():
    """ Installs d3dxof
    """

    log('Applying fixes for SUGURI 2')

    # https://github.com/ValveSoftware/Proton/issues/970#issuecomment-420421289
    util.protontricks('d3dxof')
예제 #6
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for Toybox Turbos')

    # Fix infinite startup screen
    util.set_environment('PROTON_NO_ESYNC', '1')
예제 #7
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for Age of Empires 2 HD Edition')

    # Replace launcher with game exe in proton arguments
    util.replace_command('Launcher.exe', 'AoK HD.exe')
예제 #8
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for Sniper Elite 3')

    util.replace_command('Launcher/Sniper3Launcher.exe',
                         'bin/SniperElite3.exe')
예제 #9
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for Evil Genius 2: World Domination')

    # Replace launcher with game exe in proton arguments
    util.replace_command('Launcher/eg2.exe', 'bin/evilgenius_vulkan.exe')
예제 #10
0
def main():
    """ Adds the -interline argument to the game
    """

    log('Applying fixes for Oddworld: Abe\'s Oddysee')

    # Adding -interline fixes slow videos but adds scanlines
    util.append_argument('-interline')
예제 #11
0
def main():
    """ Set to winxp
    """

    log('Applying fixes for EVE Online')

    # https://github.com/ValveSoftware/Proton/issues/1223#issue-356628050
    util.protontricks('winxp')
예제 #12
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for Mafia II: Definitive Edition')

    util.protontricks('dotnet452')
    util.replace_command('Launcher.exe', '../Mafia II Definitive Edition.exe')
예제 #13
0
def main():
    """ Install corefonts
    """

    log('Applying fixes for Grand Theft Auto V')

    # https://github.com/ValveSoftware/Proton/issues/37
    util.protontricks('corefonts')
예제 #14
0
def main():
    """ Install corefonts
    """

    log('Applying fixes for Tesla Effect')

    # https://github.com/ValveSoftware/Proton/issues/1317
    util.protontricks('corefonts')
예제 #15
0
파일: 8800.py 프로젝트: dreamer/protonfixes
def main():
    """ Install msxml3
    """

    log('Applying fixes for Civilization 4 (Beyond the Sword)')

    # https://github.com/ValveSoftware/Proton/issues/179#issuecomment-415593087
    util.protontricks('msxml3')
    util.protontricks('msxml4')
예제 #16
0
def main():
    """ Set Mesa env vars
    """

    log('Applying fixes for Call of Duty (2003')

    # https://github.com/ValveSoftware/Proton/pull/1423/commits/1a1d25c7d95691e37c94aea4e5f94e0c917aba6f
    util.set_environ('MESA_EXTENSION_MAX_YEAR', '2003')
    util.set_environ('__GL_ExtensionStringVersion', '17700')
예제 #17
0
def main():
    """ Install corefonts, dx9. Set to win7 and override msdmo
    """

    log('Applying fixes for Battlefield: Bad Company 2')

    # https://github.com/ValveSoftware/Proton/issues/200#issuecomment-415905979
    util.protontricks('win7')
    util.protontricks('corefonts')
    util.protontricks('directx9')
    util.set_environment('WINEDLLOVERRIDES', 'msdmo=b')
예제 #18
0
def main():
    """ Changes the proton argument from the launcher to the game
    """

    log('Applying fixes for FINAL FANTASY IX')

    # Fix crackling audio
    util.set_environment('PULSE_LATENCY_MSEC', '60')

    # Replace launcher with game exe in proton arguments
    util.replace_command('FF9_Launcher.exe', 'x64/FF9.exe')
예제 #19
0
def main():
    """ Installs dotnet45 directx9 vcruntime2010 and xact_june2018 and sets to winxp
    """

    log('Applying fixes for Killer is Dead at Launch')

    # https://github.com/ValveSoftware/Proton/issues/1387#issuecomment-428059647
    util.protontricks('winxp')
    util.protontricks('dotnet45')
    util.protontricks('directx9')
    util.protontricks('vcruntime2010')
    util.protontricks('xact_june2018')
예제 #20
0
def main():
    """ Uses win32 prefix, installs devenum, quartz, wmp9
    """

    log('Applying fixes for Oddworld: Munch\'s Oddysee')

    # Winetrick wmp9 requires 32bit prefix
    util.use_win32_prefix()

    # https://appdb.winehq.org/objectManager.php?sClass=version&iId=34367
    util.protontricks('devenum')
    util.protontricks('quartz')
    util.protontricks('wmp9')
예제 #21
0
def main():
    """ Install dotnet40
    Works, but gives a popup twice at the beginning of launch:
    'Unable to find a version of the runtime to run this
    application. (OK)
    """

    log('Applying fixes for Styx: Master of Shadows')

    # https://github.com/ValveSoftware/Proton/issues/810
    # https://steamcommunity.com/app/242640/discussions/0/620700960990638817/
    util.protontricks('xact')
    util.protontricks('dotnet40')
예제 #22
0
def main():
    """
    Replaces DLL files due to the versions bundled resulting
    in just errors and black screens.
    """

    log('Applying fixes for Metal Slug 2')
    metal_slug_path = util.get_game_install_path()

    # download new DLL files and replace existing ones
    for dll, props in REPLACEMENT_DLLS.items():
        download.install_from_zip(props['url'], dll, metal_slug_path,
                                  props['sha256'])
예제 #23
0
def main():
    """
    Bypassing launcher, which does not run due to broken
    .NET 4.0 installation.

    Launcher provides no functionality (only a link to Bethesda site
    without any specific Fallout 2 content).
    """
    if '-classic' in sys.argv:
        log('Bypassing launcher to run Fallout 2 (Classic Version)')
        util.replace_command('Fallout2Launcher.exe', 'fallout2.exe')
    else:
        log('Bypassing launcher to run Fallout 2 (High Resolution Version)')
        util.replace_command('Fallout2Launcher.exe', 'fallout2HR.exe')
예제 #24
0
def main():
    """ Uses win32 prefix, installs quartz devenum wmp9 xact
    """

    log('Applying fixes for Chronophantasma Extend')

    # Winetrick wmp9 requires 32bit prefix
    util.use_win32_prefix()

    # https://github.com/ValveSoftware/Proton/issues/703#issuecomment-416075961
    util.protontricks('devenum')
    util.protontricks('quartz')
    util.protontricks('wmp9')
    util.protontricks('xact')
예제 #25
0
def main():
    """ Disable ESYNC, disable intro's
    """

    log('Applying fixes for BioShock 2 Remastered')

    # After loading the game, or a save file, a key needs to be pressed 
    # to continue. That screen does not respond to keyboard or mouse, 
    # so there is no way to continue. -nointro disables that screen 
    # (but also the intro's at the start of the game).
    util.append_argument('-nointro')

    # ESYNC causes texture problems and frequent hangs.
    util.set_environment('PROTON_NO_ESYNC', '1')
예제 #26
0
def main():
    """ Uses win32 prefix, installs corefonts, dsound, l3codecx quarts mfc42 d3dx9 and dotnet20
    """

    log('Applying fixes for Age Of Empire 3: Complete Collection')

    # Winetrick wmp9 requires 32bit prefix
    util.use_win32_prefix()

    # https://github.com/ValveSoftware/Proton/issues/17#issuecomment-415977510
    util.protontricks('corefonts')
    util.protontricks('dsound')
    util.protontricks('l3codecx')
    util.protontricks('quartz')
    util.protontricks('mfc42')
    util.protontricks('d3dx9')
    util.protontricks('dotnet20')
예제 #27
0
def main():
    """ Create a ManiaPlanet folder in comptdata and link every game_bottle.
        With this games ManiaPlanet games can be switched while in game. (Same as in windows now)
    """

    game_proton_bottle = os.path.dirname(os.path.dirname(util.protonprefix()))
    compdata_folder = os.path.dirname(game_proton_bottle)
    mania_planet_folder = os.path.join(compdata_folder, "ManiaPlanet")

    if not os.path.exists(mania_planet_folder):
        log("Could not find ManiaPlanet directory.")
        log("Creating new folder and symlinking Games to it.")
        os.rename(game_proton_bottle, mania_planet_folder)
        os.symlink(mania_planet_folder, game_proton_bottle)

        for game_id in mania_planet_games:
            game_path = os.path.join(compdata_folder, str(game_id))
            if game_path == game_proton_bottle:
                continue
            if os.path.exists(game_path):
                os.remove(game_id)

            os.symlink(mania_planet_folder, game_path)
        log("All DONE")
예제 #28
0
def main():
    """ Create a ManiaPlanet folder in compatdata and link the prefixes for every game_bottle.
        With this games ManiaPlanet games can be switched while in game. (Same as in windows now)
    """

    game_proton_bottle = os.path.dirname(os.path.dirname(util.protonprefix()))
    compdata_folder = os.path.dirname(game_proton_bottle)
    mania_planet_pfx = os.path.join(compdata_folder, "ManiaPlanet")

    if not os.path.exists(mania_planet_pfx):
        log("Could not find ManiaPlanet directory.")
        log("Creating new folder and symlinking games to it.")
        pfx_folder = os.path.join(game_proton_bottle, "pfx")
        os.rename(pfx_folder, mania_planet_pfx)
        os.symlink(mania_planet_pfx, pfx_folder)

    for game_id in mania_planet_games:
        game_pfx = os.path.join(compdata_folder, str(game_id), "pfx")
        log("Checking {}".format(game_id))
        if not os.path.exists(game_pfx):
            log("No prefix for {} found, skipping.".format(game_id))
            continue
        if os.path.islink(game_pfx):
            log("{} is already a symlink, skipping.".format(game_id))
            continue

        log("Copying contents of {} to ManiaPlanet folder.".format(game_id))
        for src_dir, _, files in os.walk(game_pfx):
            dst_dir = src_dir.replace(game_pfx, mania_planet_pfx, 1)
            for file_ in files:
                src_file = os.path.join(src_dir, file_)
                dst_file = os.path.join(dst_dir, file_)
                if os.path.exists(dst_file) or not os.path.exists(src_file):
                    continue
                try:
                    shutil.move(src_file, dst_file)
                    log("Moving {} to {}".format(src_file, dst_file))
                except FileNotFoundError:
                    # FIXME: paths with special chars (&, whitespace) do not work!
                    log("Can't move {}. Continuing anyway.".format(src_file))
        log("Removing {}".format(game_pfx))
        shutil.rmtree(game_pfx)
        log("Symlinking {} prefix to ManiaPlanet folder.".format(game_id))
        os.symlink(mania_planet_pfx, game_pfx)
    log("All DONE")
예제 #29
0
def main():
    """
    Replaces DLL files due to the versions bundled resulting
    in just errors and black screens.
    """

    log('Applying fixes for Metal Slug 2')
    metal_slug_path = util.get_game_install_path()

    # download new DLL files and replace existing ones
    for dll in REPLACEMENT_DLLS:
        # check if current dlls are already the replacements
        cur_dll_path = os.path.join(metal_slug_path, dll)
        cur_sha = hashlib.sha256()

        try:
            with open(cur_dll_path, 'rb') as cur_dll_data:
                cur_sha.update(cur_dll_data.read())

            if cur_sha.hexdigest() == REPLACEMENT_DLLS[dll]['sha256']:
                log(f"{dll} is already the replacement dll. Skipping replacing it..."
                    )
                continue
        except FileNotFoundError:
            log(f"{dll} not found, will use the one from the zip.")

        req = urllib.request.urlopen(REPLACEMENT_DLLS[dll]['url'])
        # check http return code and if not 200 log and skip file
        if req.getcode() != 200:
            log(f"Received HTTP {req.status} when downloading replacement DLL {dll} skipping..."
                )
            continue

        dll_zip = zipfile.ZipFile(io.BytesIO(req.read()))
        dll_data = dll_zip.open(dll.lower())

        sha = hashlib.sha256()
        sha.update(dll_data.read())

        if sha.hexdigest() != REPLACEMENT_DLLS[dll]['sha256']:
            log(f"DLL SHA256 does not match for {dll} skipping...")
            continue

        dll_data = dll_zip.open(dll.lower())
        with open(cur_dll_path, 'wb') as out_dll:
            log(f"Writing replacement DLL data to {cur_dll_path}")
            out_dll.write(dll_data.read())
예제 #30
0
def main():
    """ dsound is needed for audio
    """

    log('Installing dsound')
    util.protontricks('dsound')