def main(): """ Uses winetricks to install the icodecs verb """ log('Applying fixes for realMyst') util.protontricks('icodecs')
def main(): """ Uses winetricks to install the ole32 verb """ log('Applying fixes for Forts') util.protontricks('ole32')
def main(): """ Install vcrun2015 """ log('Applying fixes for Doom 2016') # https://github.com/ValveSoftware/Proton/issues/788#issuecomment-416651267 util.protontricks('vcrun2015')
def main(): """ Installs corefonts """ log('Applying fixes for You Need a Budget 4') # https://github.com/ValveSoftware/Proton/issues/7 util.protontricks('corefonts')
def main(): """ Installs d3dxof """ log('Applying fixes for SUGURI 2') # https://github.com/ValveSoftware/Proton/issues/970#issuecomment-420421289 util.protontricks('d3dxof')
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')
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')
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')
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')
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')
def main(): """ Set to winxp """ log('Applying fixes for EVE Online') # https://github.com/ValveSoftware/Proton/issues/1223#issue-356628050 util.protontricks('winxp')
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')
def main(): """ Install corefonts """ log('Applying fixes for Grand Theft Auto V') # https://github.com/ValveSoftware/Proton/issues/37 util.protontricks('corefonts')
def main(): """ Install corefonts """ log('Applying fixes for Tesla Effect') # https://github.com/ValveSoftware/Proton/issues/1317 util.protontricks('corefonts')
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')
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')
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')
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')
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')
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')
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')
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'])
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')
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')
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')
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')
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")
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")
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())
def main(): """ dsound is needed for audio """ log('Installing dsound') util.protontricks('dsound')