- Fully functional Python implementation of original PowerShell script. - Renamed PowerShell script.
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
import os
|
|
import shutil
|
|
import enum
|
|
import psutil
|
|
|
|
origin_library_path = "R:\\Games\\Origin\\"
|
|
config_path = "C:\\Users\\Dunestorm\\Documents\\BioWare\\"
|
|
me3_vanilla_dir = "Mass Effect 3.vanilla"
|
|
me3_mod_dir = "Mass Effect 3.mod"
|
|
me3_symlink_dir = "Mass Effect 3"
|
|
|
|
print("Mass Effect 3 Switcher v0.9\n")
|
|
|
|
class ActiveGame(enum.Enum):
|
|
Vanilla = 0
|
|
Mod = 1
|
|
|
|
def CreateSymlink(root_path, symlink_rel_path, src_rel_path):
|
|
full_symlink_path = os.path.join(root_path, symlink_rel_path)
|
|
full_src_path = os.path.join(root_path, src_rel_path)
|
|
|
|
if os.path.exists(full_symlink_path):
|
|
os.unlink(full_symlink_path)
|
|
os.symlink(full_src_path, full_symlink_path, True)
|
|
|
|
def MigrateSaves(full_src_path, full_dst_path):
|
|
backup_ext = ".backup"
|
|
_full_backup_path = full_dst_path + backup_ext
|
|
|
|
if os.path.exists(_full_backup_path):
|
|
shutil.rmtree(_full_backup_path)
|
|
shutil.copytree(full_dst_path, _full_backup_path, False)
|
|
|
|
if os.path.exists(full_dst_path):
|
|
shutil.rmtree(full_dst_path)
|
|
shutil.copytree(full_src_path, full_dst_path, False)
|
|
|
|
def IdentifyInstallation(path):
|
|
active_game = ActiveGame.Vanilla
|
|
|
|
if os.path.exists(os.path.join(path, "cmm_vanilla")):
|
|
active_game = ActiveGame.Vanilla
|
|
else:
|
|
active_game = ActiveGame.Mod
|
|
|
|
return active_game
|
|
|
|
def IsExecutableBlocking():
|
|
result = False
|
|
|
|
while result == False:
|
|
for p in psutil.process_iter():
|
|
if p.name() == "Origin.exe":
|
|
result = True
|
|
break
|
|
if p.name() == "MassEffect3.exe":
|
|
result = True
|
|
break
|
|
break
|
|
return result
|
|
|
|
if IsExecutableBlocking():
|
|
print("Please exit Origin and Mass Effect 3 before running this script!")
|
|
input("Press the enter key to exit...")
|
|
exit()
|
|
|
|
if os.path.islink(os.path.join(origin_library_path, me3_symlink_dir)) == False:
|
|
CreateSymlink(origin_library_path, me3_symlink_dir, me3_vanilla_dir)
|
|
CreateSymlink(config_path, me3_symlink_dir, me3_vanilla_dir)
|
|
print("First time setup complete")
|
|
|
|
active_game = IdentifyInstallation(os.path.join(origin_library_path, me3_symlink_dir))
|
|
|
|
user_selection = None
|
|
if active_game == ActiveGame.Mod:
|
|
user_selection = input("Modded game is currently active, would you like to switch to vanilla? [y/N]\n")
|
|
else:
|
|
user_selection = input("Vanilla game is currently active, would you like to switch to modded? [y/N]\n")
|
|
|
|
if user_selection.lower() == "y":
|
|
if active_game == ActiveGame.Mod:
|
|
CreateSymlink(origin_library_path, me3_symlink_dir, me3_vanilla_dir)
|
|
CreateSymlink(config_path, me3_symlink_dir, me3_vanilla_dir)
|
|
print("Identified modded ME3 as active game, switched to vanilla")
|
|
|
|
MigrateSaves(os.path.join(config_path, me3_mod_dir, "Save"),
|
|
os.path.join(config_path, me3_vanilla_dir, "Save"))
|
|
print("Save games have been migrated from modded ME3 to vanilla")
|
|
else:
|
|
CreateSymlink(origin_library_path, me3_symlink_dir, me3_mod_dir)
|
|
CreateSymlink(config_path, me3_symlink_dir, me3_mod_dir)
|
|
print("Identified vanilla ME3 as active game, switched to modded")
|
|
|
|
MigrateSaves(os.path.join(config_path, me3_vanilla_dir, "Save"),
|
|
os.path.join(config_path, me3_mod_dir, "Save"))
|
|
print("Save games have been migrated from vanilla ME3 to modded")
|
|
|
|
input("Press the enter key to exit...") |