MEmu := "RPCS3"
MEmuV := "v0.0.8-9342-ad845861 Alpha"
MURL := ["https://rpcs3.net"]
MAuthor := ["slashin8r", "wallmachine", "jviegas", "brolly", "aurel102001"]
MVersion := "1.1.6"
MDate := "2020-01-07"
MCRC := ""
iCRC := ""
MID := ""
MSystem := ["Sony Playstation 3"]
;----------------------------------------------------------------------------
; Notes:
; [IMPORTANT]
; There are three methods for using this module.
;
; METHOD 1: Archives: Use this method if you will be compressing your games to save space.
; 1) Archive your game folders, rename the archive to the title of the game, place all the archives within the same folder, and then add that folder as a romPath in RocketLauncher.
; 2) Add the archive's extension ("7z", "rar", "zip", etc.) for the RPCS3 emulator within RocketLauncher.
; 3) Generate a new database based on the new rom path.
; 4) Audit all games for the system and enjoy.
;
; METHOD 2: Shortcuts: Use this method if you will be installing your games directly into RPCS3. Can also be used if you will be storing your non-archive games outside of the RPCS3 installation directories.
; 1) Create shortcuts of your EBOOT.BIN files, rename them to the title of the game, place them all within the same folder, then add that folder as a romPath in RocketLauncher.
; 2) Add the "lnk" (LNK) extension for the RPCS3 emulator within RocketLauncher.
; 3) Generate a new database based on the new rom path.
; 4) Audit all games for the system and enjoy.
;
; METHOD 3: Text Files: Use this method if you are converting over from a RPCS3 module prior to version 1.0.2.
; 1) Place game folders all within the same folder. You can rename these folders to whatever you like, usually the title of the game. (e.g. "Rune Factory - Oceans (Europe) [BLES01550]")
; 2) Create a text file for every game with the same name as its game folder. (e.g. "Rune Factory - Oceans (Europe) [BLES01550]")
; 3) Place these text files within the folder storing your games.
; [If you wish to have the text files in a separate folder, edit the "GamesDirectory" variable, found within your RPCS3.ini file, to match the full path of the folder storing your games]
; 4) Add the folder containing your text files as a romPath in RocketLauncher.
; 5) Add the "txt" extension for the RPCS3 emulator within RocketLauncher.
; 6) Generate a new database based on the new rom path.
; 7) Audit all games for the system and enjoy.
; [IMPORTANT]
;
;
;
; To save additional space, this module now automatically compresses each game's PPU folder and Game Data folder (if exists) as long as it is enabled in your RPCS3.ini file.
; PPU file saved in: %romPath%\cache\%romName%_%A_ComputerName%.7z (PPU files are hardware specific, so the computer name is added to the end of the filename)
; Game Data file saved in: %romPath%\data\%romName%_data.7z ("_data" added to the end of the filename so there is no conflict with the rom name)
;
; Example:
; Rom File = "D:\PS3\PS3 Test Game.rar"
; A_ComputerName = "PC001"
;
; PPU File = "D:\PS3\cache\PS3 Test Game_PC001.7z")
; Game Data File = "D:\PS3\data\PS3 Test Game_data.7z")
;
;
;
; Known Issues:
; 1) Additional progress bar appears just before the game is extracted/loaded (after the PPU and/or DATA archives are extracted). This problem is not specific to this module.
; 2) Unable to run PSN games with the emulator stored on a network drive.
;
;
;
; Coming Soon:
; 1) Allow PSN games to run from the installed path.
;----------------------------------------------------------------------------
StartModule()
BezelGUI()
FadeInStart()
primaryExe := new Emulator(emuPath . "\" . executable)
primaryWindowClassName := "Qt5QWindowIcon"
emuPrimaryWindow := new Window(new WindowTitle(,primaryWindowClassName, executable))
; Finding emulator config file
Rpcs3config := new File(emuPath . "\config.yml")
Rpcs3config.CheckFile("Could not find RPCS3 config.yml! Run your emulator, go to Settings and save them.")
textGameFolder := moduleIni.Read("Settings", "GamesDirectory","",,1)
archivePPUFolder := moduleIni.Read("Settings", "PPUDirectory",".\cache",,1)
archiveDATAFolder := moduleIni.Read("Settings", "DATADirectory",".\data",,1)
archiveCACHESFolder := moduleIni.Read("Settings", "CACHESDirectory",".\data\caches",,1)
archivePPU := moduleIni.Read("Settings", "ArchivePPU","false",,1)
archiveDATA := moduleIni.Read("Settings", "ArchiveDATA","false",,1)
archiveCACHES := moduleIni.Read("Settings", "ArchiveCACHES","false",,1)
removePPU := moduleIni.Read("Settings", "RemovePPU","false",,1)
removeDATA := moduleIni.Read("Settings", "RemoveDATA","false",,1)
removeCACHES := moduleIni.Read("Settings", "RemoveCACHES","false",,1)
; Convert relative paths into full paths.
textGameFolder := RelativeToFull(textGameFolder, romPath)
archivePPUFolder := RelativeToFull(archivePPUFolder, romPath)
archiveDATAFolder := RelativeToFull(archiveDATAFolder, romPath)
archiveCACHESFolder := RelativeToFull(archiveCACHESFolder, romPath)
BezelStart()
hideEmuObj := Object(emuPrimaryWindow,1)
HideAppStart(hideEmuObj,hideEmu)
; Set variables
gameType := ""
gameSerial := ""
gameDirectoryJunction := "false"
gamePPU := "false"
gamePPUarchive := archivePPUFolder . "\" . romName . "_" . A_ComputerName . ".7z"
gamePPUromPath := archivePPUFolder
gamePPUromName := romName . "_" . A_ComputerName
gamePPUromExtension := ".7z"
gamePPUemuPath := emuPath . "\cache"
gameDATA := "false"
gameDATAarchive := archiveDATAFolder . "\" . romName . "_data.7z"
gameDATAromPath := archiveDATAFolder
gameDATAromName := romName . "_data"
gameDATAromExtension := "7z"
gameDATAemuPath := emuPath . "\dev_hdd0\game"
gameCACHES := "false"
gameCACHESarchive := archiveCACHESFolder . "\" . romName . "_hdd1.7z"
gameCACHESromPath := archiveCACHESFolder
gameCACHESromName := romName . "_hdd1"
gameCACHESromExtension := "7z"
gameCACHESemuPath := emuPath . "\dev_hdd1\caches"
textRomFolder := ""
If (romExtension = ".txt")
{
FileReadLine, textRomFolder, %romPath%\%romName%%romExtension%, 1
If (textGameFolder = "")
{
If (textRomFolder = "")
{
gameSerial := romName
If (Fileexist(romPath . "\" . romName . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
gameType := "disc"
romPath := romPath . "\" . romName . "\PS3_GAME\USRDIR"
}
Else If (Fileexist(romPath . "\" . romName . "\USRDIR\EBOOT.BIN"))
{
gameType := "game"
romPath := romPath . "\" . romName . "\USRDIR"
}
Else
{
ScriptError("Unable to find EBOOT.BIN within the folder: """ . romPath . "\" . romName . "\""")
}
}
Else
{
gameSerial := textRomFolder
If (Fileexist(romPath . "\" . textRomFolder . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
gameType := "disc"
romPath := romPath . "\" . textRomFolder . "\PS3_GAME\USRDIR"
}
Else If (Fileexist(romPath . "\" . textRomFolder . "\USRDIR\EBOOT.BIN"))
{
gameType := "game"
romPath := romPath . "\" . textRomFolder . "\USRDIR"
}
Else
{
ScriptError("Unable to find EBOOT.BIN within the folder: """ . romPath . "\" . textRomFolder . "\""")
}
}
}
Else
{
If (textRomFolder = "")
{
gameSerial := romName
If (Fileexist(textGameFolder . "\" . romName . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
gameType := "disc"
romPath := textGameFolder . "\" . romName . "\PS3_GAME\USRDIR"
}
Else If (Fileexist(textGameFolder . "\" . romName . "\USRDIR\EBOOT.BIN"))
{
gameType := "game"
romPath := textGameFolder . "\" . romName . "\USRDIR"
}
Else
{
ScriptError("Unable to find EBOOT.BIN within the folder: """ . textGameFolder . "\" . romName . "\""")
}
}
Else
{
gameSerial := textRomFolder
If (Fileexist(textGameFolder . "\" . textRomFolder . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
gameType := "disc"
romPath := textGameFolder . "\" . textRomFolder . "\PS3_GAME\USRDIR"
}
Else If (Fileexist(textGameFolder . "\" . textRomFolder . "\USRDIR\EBOOT.BIN"))
{
gameType := "game"
romPath := textGameFolder . "\" . textRomFolder . "\USRDIR"
}
Else
{
ScriptError("Unable to find EBOOT.BIN within the folder: """ . textGameFolder . "\" . textRomFolder . "\""")
}
}
}
}
Else If (romExtension = ".lnk" && Fileexist(romPath . "\" . romName . romExtension))
{
FileGetShortCut, %romPath%\%romName%%romExtension%, shortcutTarget
StringReplace, romPath, shortcutTarget, \EBOOT.BIN
}
Else If (InStr(sevenZFormats, romExtension)) {
gameSerial := RLObject.getZipRootFolder(romPath . "\" . romName . romExtension)
}
; Store old values for later
originalRomPath := romPath
originalRomName := romName
originalRomExtension := romExtension
originalSevenZRomPath := sevenZRomPath
originalGameName := gameInfo["Name"].Value
; Extract PPU files if they exist
If (archivePPU = "true" && Fileexist(gamePPUarchive))
{
gameInfo["Name"].Value := "EXTRACTING COMPILED PPU FILES"
romExPercentage := 0
layer3Percentage := 0
rootFolder := RLObject.getZipRootFolder(gamePPUarchive)
romExSize := RLObject.getZipExtractedSize(gamePPUarchive)
sevenZRomPath := gamePPUemuPath . "\" . rootFolder
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
; 7z(gamePPUromPath, gamePPUromName, gamePPUromExtension, gamePPUemuPath)
RunWait, %ComSpec% /c ""%sevenZPath%" x "%gamePPUarchive%" -aos -o"%gamePPUemuPath%", sevenZPID, Hide
gamePPU := "true"
}
; Extract Game Data files if they exist
If (archiveDATA = "true" && Fileexist(gameDATAarchive))
{
gameInfo["Name"].Value := "EXTRACTING ADDITIONAL GAME DATA"
romExPercentage := 0
layer3Percentage := 0
rootFolder := RLObject.getZipRootFolder(gameDATAarchive)
romExSize := RLObject.getZipExtractedSize(gameDATAarchive)
sevenZRomPath := gameDATAemuPath . "\" . rootFolder
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
; 7z(gameDATAromPath, gameDATAromName, gameDATAromExtension, gameDATAemuPath)
RunWait, %ComSpec% /c ""%sevenZPath%" x "%gameDATAarchive%" -aos -o"%gameDATAemuPath%", sevenZPID, Hide
gameDATA := "true"
}
; Extract Game Data files if they exist
If (archiveCACHES = "true" && Fileexist(gameCACHESarchive))
{
gameInfo["Name"].Value := "EXTRACTING ADDITIONAL GAME CACHES"
romExPercentage := 0
layer3Percentage := 0
rootFolder := RLObject.getZipRootFolder(gameCACHESarchive)
romExSize := RLObject.getZipExtractedSize(gameCACHESarchive)
sevenZRomPath := gameCACHESemuPath . "\" . rootFolder
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
; 7z(gameCACHESromPath, gameCACHESromName, gameCACHESromExtension, gameCACHESemuPath)
RunWait, %ComSpec% /c ""%sevenZPath%" x "%gameCACHESarchive%" -aos -o"%gameCACHESemuPath%", sevenZPID, Hide
gameCACHES := "true"
}
If (gamePPU := "true" || gameDATA := "true" || gameCACHES := "true")
{
sevenZRomPath := originalSevenZRomPath
gameInfo["Name"].Value := originalGameName
Gdip_GraphicsClear(Fade_G5)
}
romPath := originalRomPath
romName := originalRomName
romExtension := originalRomExtension
romExPercentage := 0
layer3Percentage := 0
romExSize := 1000000000
use7zAnimation := "true"
Gosub, UpdateFadeFor7z
7z(romPath, romName, romExtension, sevenZExtractPath)
IfInString, romPath, \USRDIR
{
FoundPos := InStr(romPath, "\USRDIR") + 6
StringLeft, romPath, romPath, %FoundPos%
}
romFolder := romPath
; Find the game location and determine the type of game (disc or hdd)
StringRight, stringTest, romFolder, 6
If (stringTest = "USRDIR")
{
StringReplace, romFolder, romFolder, \USRDIR
paramFile := romFolder . "\PARAM.SFO"
FileRead, data, *c %paramFile%
offset := StrLen(data)-24
SetFormat, IntegerFast, hex
offset += 0
offset .= ""
SetFormat, IntegerFast, d
gameSerial := StrGet(&data + offset, "UTF-8")
StringLeft, stringTest, gameSerial, 2
If (stringTest = "NP")
{
gameType := "game"
}
Else
{
gameType := "disc"
}
; Create the directory junction
If (gameSerial != "" && gameType != "")
{
If (!Fileexist(emuPath . "\dev_hdd0\" . gameType . "\" . gameSerial))
{
StringReplace, romFolder, romFolder, \PS3_GAME
RunWait, %ComSpec% /c "mklink /J "%emuPath%\dev_hdd0\%gameType%\%gameSerial%" "%romFolder%", , Hide
RunWait, %ComSpec% /c "mklink /D "%emuPath%\dev_hdd0\%gameType%\%gameSerial%" "%romFolder%", , Hide
gameDirectoryJunction := "true"
}
}
}
Else
{
ScriptError("Rom was not found in the USRDIR directory. Please make sure ""bin"" is an RPCS3 extension and also verify the folder structure of your rom.")
}
;MsgBox, romPath: %romPath%`nromName: %romName%`nromExtension: %romExtension%`ngameType: %gameType%`ngameSerial: %gameSerial%`ngameDirectoryJunction: %gameDirectoryJunction%`ngamePPU: %gamePPU%`ngameDATA: %gameDATA%`nsevenZEnabled: %sevenZEnabled%
; Run the game
If (gameType = "game")
{
primaryExe.Run(" """ . emuPath . "\dev_hdd0\" . gameType . "\" . gameSerial . "\USRDIR\EBOOT.BIN""")
}
Else If (Fileexist(emuPath . "\dev_hdd0\" . gameType . "\" . gameSerial . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
primaryExe.Run(" """ . emuPath . "\dev_hdd0\" . gameType . "\" . gameSerial . "\PS3_GAME\USRDIR\EBOOT.BIN""")
}
Else If (Fileexist(romPath . "\PS3_GAME\USRDIR\EBOOT.BIN"))
{
primaryExe.Run(" """ . romPath . "\PS3_GAME\USRDIR\EBOOT.BIN""")
}
Else If (Fileexist(romPath . "\EBOOT.BIN"))
{
primaryExe.Run(" """ . romPath . "\EBOOT.BIN""")
}
Else If (Fileexist(romPath . "\" . romName . ".BIN"))
{
primaryExe.Run(" """ . romPath . "\" . romName . ".BIN""")
}
Else If (Fileexist(romPath . "\" . romName . romExtension))
{
primaryExe.Run(" """ . romPath . "\" . romName . romExtension . """")
}
Else
{
ScriptError("Unable to find EBOOT.BIN file. Please make sure ""bin"" (and ""lnk"" [LNK] if you are loading from shortcuts) is an RPCS3 extension and also verify the folder structure of your rom.")
}
; Waiting for main emulator window
emuPrimaryWindow.Wait()
emuPrimaryWindow.Active()
emuPrimaryWindow.WaitActive()
; Waiting up to 5 seconds to see if compiling window appears
If (gameSerial != "" && gamePPU != "true")
{
Loop, 5
{
WinHide, Compiling
WinWait, Compiling, , 1
If (!ErrorLevel)
{
gameInfo["Name"].Value := "COMPILING PPU FILES"
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
WinHide, Compiling
WinWaitClose, Compiling
gameInfo["Name"].Value := originalGameName
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
Break
}
}
}
BezelDraw()
HideAppEnd(hideEmuObj,hideEmu)
FadeInExit()
primaryExe.Process("WaitClose")
; Remove the PPU files if they were extracted or creates PPU archive file if needed
If ((archivePPU = "true" || removePPU = "true") && gameSerial != "")
{
IfExist, %gamePPUemuPath%\%gameSerial%
{
If (archivePPU = "true")
{
IfNotExist, %gamePPUarchive%
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING COMPILED PPU FILES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a "%gamePPUarchive%" "%gamePPUemuPath%\%gameSerial%", , Hide
FadeInExit()
}
Else
{
MostRecentTime := 0
Loop, %gamePPUemuPath%\%gameSerial%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
}
}
FileGetTime, gamePPUtime, %gamePPUarchive%, M
If (MostRecentTime > gamePPUtime)
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING COMPILED PPU FILES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a "%gamePPUarchive%" "%gamePPUemuPath%\%gameSerial%", , Hide
FadeInExit()
}
}
}
If (removePPU = "true")
{
FileRemoveDir, %gamePPUemuPath%\%gameSerial%, 1
}
}
Else
{
MostRecentTime := 0
MostRecentFile := ""
MostRecentName := ""
Loop, %gamePPUemuPath%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
MostRecentFile := A_LoopFileLongPath
MostRecentName := A_LoopFileName
}
}
If (StrLen(MostRecentName) = 9)
{
If (archivePPU = "true")
{
IfNotExist, %gamePPUarchive%
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING COMPILED PPU FILES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a "%gamePPUarchive%" "%MostRecentFile%", , Hide
FadeInExit()
}
Else
{
MostRecentTime := 0
Loop, %gamePPUemuPath%\%MostRecentName%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
}
}
FileGetTime, gamePPUtime, %gamePPUarchive%, M
If (MostRecentTime > gamePPUtime)
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING COMPILED PPU FILES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a "%gamePPUarchive%" "%MostRecentFile%", , Hide
FadeInExit()
}
}
}
If (removePPU = "true")
{
FileRemoveDir, %MostRecentFile%, 1
}
}
}
}
; Remove the Game Data files if they were extracted or creates Game Data archive file if needed
If ((archiveDATA = "true" || removeDATA = "true") && gameSerial != "" && gameType = "disc")
{
archiveFileArray := []
archiveFileCount := 0
Loop, %gameDATAemuPath%\*, 2
{
IfInString, A_LoopFileName, %gameSerial%
{
archiveFileCount := archiveFileCount + 1
archiveFileArray[archiveFileCount] := A_LoopFileLongPath
}
}
MostRecentTime := 0
MostRecentFile := ""
MostRecentName := ""
Loop, %gameDATAemuPath%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
MostRecentFile := A_LoopFileLongPath
MostRecentName := A_LoopFileName
}
}
fileOne := MostRecentFile . "\ICON0.PNG"
fileTwo := emuPath . "\dev_hdd0\" . gameType . "\" . gameSerial . "\PS3_GAME\ICON0.PNG"
FileGetSize, dataSizeOne, %fileOne%
FileGetSize, dataSizeTwo, %fileTwo%
FileGetVersion, dataVersionOne, %fileOne%
FileGetVersion, dataVersionTwo, %fileTwo%
StringLeft, testRecentFour, MostRecentName, 4
StringLeft, testSerialFour, gameSerial, 4
If (dataSizeOne = dataSizeTwo && dataVersionOne = dataVersionTwo && MostRecentName != ".locks" && MostRecentName != "TEST12345" && testRecentFour = testSerialFour)
{
If !HasVal(archiveFileArray, MostRecentFile)
{
archiveFileCount := archiveFileCount + 1
archiveFileArray[archiveFileCount] := MostRecentFile
}
}
If (archiveFileCount > 0)
{
archiveFileString := ""
Loop % archiveFileCount
{
If (archiveFileString != "")
{
archiveFileString := archiveFileString . " "
}
archiveFileString := archiveFileString . """" . archiveFileArray[A_Index] . """"
}
If (archiveDATA = "true")
{
IfNotExist, %gameDATAarchive%
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING ADDITIONAL GAME DATA"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a -mx=0 "%gameDATAarchive%" %archiveFileString%, , Hide
FadeInExit()
}
Else
{
Loop % archiveFileCount
{
archiveElement := archiveFileArray[A_Index]
MostRecentTime := 0
Loop, %archiveElement%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
}
}
FileGetTime, gameDATAtime, %gameDATAarchive%, M
FileGetTime, gameDATAarchiveTime, %archiveElement%, M
If (MostRecentTime > gameDATAtime || gameDATAarchiveTime > gameDATAtime)
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING ADDITIONAL GAME DATA"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a -mx=0 "%gameDATAarchive%" %archiveFileString%, , Hide
FadeInExit()
Break
}
}
}
}
If (removeDATA = "true")
{
Loop % archiveFileCount
{
archiveElement := archiveFileArray[A_Index]
FileRemoveDir, %archiveElement%, 1
}
}
}
}
; Remove the Game Caches if they were extracted or creates Game Caches archive file if needed
If ((archiveCACHES = "true" || removeCACHES = "true") && gameSerial != "")
{
archiveFileArray := []
archiveFileCount := 0
Loop, %gameCACHESemuPath%\*, 2
{
IfInString, A_LoopFileName, %gameSerial%
{
archiveFileCount := archiveFileCount + 1
archiveFileArray[archiveFileCount] := A_LoopFileLongPath
}
}
MostRecentTime := 0
MostRecentFile := ""
MostRecentName := ""
Loop, %gameCACHESemuPath%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
MostRecentFile := A_LoopFileLongPath
MostRecentName := A_LoopFileName
}
}
StringLeft, testRecentFour, MostRecentName, 4
StringLeft, testSerialFour, gameSerial, 4
If (MostRecentName != ".locks" && MostRecentName != "TEST12345" && testRecentFour = testSerialFour)
{
If !HasVal(archiveFileArray, MostRecentFile)
{
archiveFileCount := archiveFileCount + 1
archiveFileArray[archiveFileCount] := MostRecentFile
}
}
If (archiveFileCount > 0)
{
archiveFileString := ""
Loop % archiveFileCount
{
If (archiveFileString != "")
{
archiveFileString := archiveFileString . " "
}
archiveFileString := archiveFileString . """" . archiveFileArray[A_Index] . """"
}
If (archiveCACHES = "true")
{
IfNotExist, %gameCACHESarchive%
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING ADDITIONAL GAME CACHES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a -mx=0 "%gameCACHESarchive%" %archiveFileString%, , Hide
FadeInExit()
}
Else
{
Loop % archiveFileCount
{
archiveElement := archiveFileArray[A_Index]
MostRecentTime := 0
Loop, %archiveElement%\*, 2
{
If (A_LoopFileTimeModified > MostRecentTime)
{
MostRecentTime := A_LoopFileTimeModified
}
}
FileGetTime, gameCACHEStime, %gameCACHESarchive%, M
FileGetTime, gameCACHESarchiveTime, %archiveElement%, M
If (MostRecentTime > gameCACHEStime || gameCACHESarchiveTime > gameCACHEStime)
{
FadeInStart()
gameInfo["Name"].Value := "ARCHIVING ADDITIONAL GAME CACHES"
romExPercentage := 0
layer3Percentage := 0
use7zAnimation := "true"
Gdip_GraphicsClear(Fade_G5)
Gosub, UpdateFadeFor7z
RunWait, %ComSpec% /c ""%sevenZPath%" a -mx=0 "%gameCACHESarchive%" %archiveFileString%, , Hide
FadeInExit()
Break
}
}
}
}
If (removeCACHES = "true")
{
Loop % archiveFileCount
{
archiveElement := archiveFileArray[A_Index]
FileRemoveDir, %archiveElement%, 1
}
}
}
}
; Remove the directory junction
If (gameDirectoryJunction = "true")
{
RunWait, %ComSpec% /c "rmdir "%emuPath%\dev_hdd0\%gameType%\%gameSerial%", , Hide
}
7zCleanUp()
BezelExit()
FadeOutExit()
ExitModule()
CloseProcess:
FadeOutStart()
emuPrimaryWindow.Close()
Process, Close, %executable%
Return
BezelLabel:
disableHideBorder := "true"
disableHideTitleBar := "true"
disableHideToggleMenu := "true"
Return
HasVal(haystack, needle) {
for index, value in haystack
if (value = needle)
return index
if !(IsObject(haystack))
throw Exception("Bad haystack!", -1, haystack)
return 0
}
RelativeToFull(relativePath, relativeOf) {
StringLeft, stringTest, relativePath, 2
If (stringTest = ".\")
{
StringTrimLeft, relativePath, relativePath, 1
relativePath := relativeOf . relativePath
}
Else If (stringTest = "..")
{
StringSplit, relativePaths, relativePath, "\"
relativePathsCount := 0
tempPath := ""
Loop, %relativePaths0%
{
element := relativePaths%A_Index%
If (element = "..")
{
relativePathsCount := relativePathsCount + 1
}
Else
{
tempPath := tempPath . element
If (A_Index != relativePaths0)
{
tempPath := tempPath . "\"
}
}
}
relativePath := tempPath
StringSplit, relativeOfFolders, relativeOf, "\"
romGameFoldersCount := relativeOfFolders0 - relativePathsCount
If (romGameFoldersCount > 0)
{
tempPath := ""
Loop, %romGameFoldersCount%
{
element := relativeOfFolders%A_Index%
tempPath := tempPath . element . "\"
}
relativePath := tempPath . relativePath
}
}
return relativePath
}