Jump to content
(Open Beta) HyperSpin 2 is now available for everyone ×

31 Screenshots

About This File

...


What's New in Version 05/22/2026 03:24 PM

Released

MEmu := "RPCS3"
MEmuV := ""
MURL := ["https://rpcs3.net"]
MAuthor := ["slashin8r", "wallmachine", "jviegas", "brolly", "aurel102001"]
MVersion := ""
MDate := ""
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
            Break
          }
        }
      }
    }
    If (removeCACHES = "true")
    {
      Loop % archiveFileCount
      {
        archiveElement := archiveFileArray[A_Index]
        FileRemoveDir, %archiveElement%, 1
      }
    }
  }
}
FadeInExit()
; Remove the directory junction
If (gameDirectoryJunction = "true")
{
  RunWait, %ComSpec% /c "rmdir "%emuPath%\dev_hdd0\%gameType%\%gameSerial%", , Hide
}

7zCleanUp()
BezelExit()
FadeOutExit()
ExitModule()

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
}

CloseProcess:
Process, Close, %executable%
FadeOutStart()
Return


Aspect Ratio

16:9
  • Super Like 1

User Feedback

You may only provide a review once you have downloaded the file.

There are no reviews to display.

×
×
  • Create New...