I'll preface this by saying I don't think this is an RL issue...
I see a few threads where people are using this configuration but I am having some issues. I was able to create new launchers for Nintendo GameCube, Nintendo 64 and Sega 32X in Advanced Launcher without issue. An example command line for the launcher is...
The above launches Fusion with the ROM I selected and my 'exit emulator' buttons work as expected. However, when I try the same command line with PC Games (C:\RocketLauncher\RocketLauncher.exe -s "PC Games" -r "%rom%"), I get following error:
Although the Kodi log shows a good command line being passed...
is the fact that I am using .LNK files the issue here. I wanted to do it this way so I had one folder as a point of reference for all PC Games. FYI...my PC Games launch fine in RLUI. I will say though that I use .LNK files to populate the DB in RL (I don't know if this is an issue as you are supposed to leave extensions empty...I think).
I've looks at the wiki for the command line parameters but the pieces about -p and -f somewhat baffle me (and I didn't need to use them for my emulators).
Below is my RL log from the time when I tried to launch Castle Crashers via Kodi/RL. From what I can see in this log, the command never even made it to RL.
John
I see a few threads where people are using this configuration but I am having some issues. I was able to create new launchers for Nintendo GameCube, Nintendo 64 and Sega 32X in Advanced Launcher without issue. An example command line for the launcher is...
Code:
C:\RocketLauncher\RocketLauncher.exe -s "Sega 32X" -r "%rom%"
The above launches Fusion with the ROM I selected and my 'exit emulator' buttons work as expected. However, when I try the same command line with PC Games (C:\RocketLauncher\RocketLauncher.exe -s "PC Games" -r "%rom%"), I get following error:
Although the Kodi log shows a good command line being passed...
Code:
06:11:39 T:7100 NOTICE: AdvancedLauncher: Load launchers.xml file
06:11:39 T:7100 NOTICE: AdvancedLauncher: Initialisation
06:11:39 T:7100 NOTICE: AdvancedLauncher: application : C:\RocketLauncher\RocketLauncher.exe
06:11:39 T:7100 NOTICE: AdvancedLauncher: arguments : -s "PC Games" -r "G:\Games\PC Games\Castle Crashers.lnk"
is the fact that I am using .LNK files the issue here. I wanted to do it this way so I had one folder as a point of reference for all PC Games. FYI...my PC Games launch fine in RLUI. I will say though that I use .LNK files to populate the DB in RL (I don't know if this is an issue as you are supposed to leave extensions empty...I think).
I've looks at the wiki for the command line parameters but the pieces about -p and -f somewhat baffle me (and I didn't need to use them for my emulators).
Below is my RL log from the time when I tried to launch Castle Crashers via Kodi/RL. From what I can see in this log, the command never even made it to RL.
Code:
17:53:22:674 | RL | INFO | +N/A | Main - RocketLauncher v1.1.1.1 (www.rlauncher.com)
17:53:23:257 | RL | INFO | +593 | Main - System Specs:
RocketLauncher Dir: C:\RocketLauncher
RocketLauncher is: 32-bit
OS: Microsoft Windows 10 Pro
SKU: Professional
Total Memory: 8188.17 MB
Free Memory: 6455.96 MB
Used Memory: 1732.215 MB
SystemType: 64-bit
Physical Processors: 1
Logical Processors: 8
GPU 1 Name: NVIDIA GeForce GTX 950
GPU 1 RAM: -2048.00 MB
GPU 1 Driver Version: 21.21.13.7270
Sound 1 Device: NVIDIA High Definition Audio
Sound 1 Status: Enabled
OS Language: English_United_States
System Locale: en-US
Formats Locale: en-US
Windows UI Language: en-US
Text Encoding: Windows-1252
OS Admin Status: No
RL Compatibility Flags: HIGHDPIAWARE
Latest .Net Version: v4.0.30319
Monitor #1 (\\.\DISPLAY1): 1920x1080 (1920x1020 work) [32bit] [60hz] [Landscape] (Primary)
Current AHK Desktop Width: 1920
Current AHK Desktop Height: 1080
Monitor #1 DPI: 150
ErrorMode: 0
AutoHotkey Path:
AHK Version: 1.1.13.00
Unicode: No
17:53:23:257 | RL | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\RocketLauncher.exe exists
17:53:23:258 | RL | INFO | +0 | Main - Raw CLI received: "-s Nintendo GameCube -r G:\Games\Nintendo Gamecube\Super Smash Bros. Melee (USA) (En,Ja) (v1.00).iso"
17:53:23:258 | RL | INFO | +0 | Main - Loading Front End Plugin: "RocketLauncherUI"
17:53:23:258 | RL | INFO | +0 | Process.Process - "Exist" "RocketLauncherUI.exe"
17:53:23:262 | RL | INFO | +0 | Main - RocketLauncherUI.exe is not currently running
17:53:23:262 | RL | INFO | +0 | Main - RocketLauncher received "Nintendo GameCube" and "Super Smash Bros. Melee (USA) (En,Ja) (v1.00)"
17:53:23:280 | RL | INFO | +16 | Main - Did not find a "C:\RocketLauncher\Settings\Nintendo GameCube\Game Options.ini" file, skipping any game-specific options.
17:53:23:280 | RL | INFO | +0 | Main - Super Smash Bros. Melee (USA) (En,Ja) (v1.00) is using the default emulator: Dolphin
17:53:23:280 | RL | INFO | +0 | Main - Checking for a [Dolphin] section in C:\RocketLauncher\Settings\Nintendo GameCube\Emulators.ini
17:53:23:280 | RL | INFO | +0 | Main - Checking for a [Dolphin] section in C:\RocketLauncher\Settings\Global Emulators.ini
17:53:23:281 | RL | INFO | +0 | Main - Found [Dolphin] in C:\RocketLauncher\Settings\Global Emulators.ini
17:53:23:281 | RL | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\Modules\Dolphin\Dolphin.ahk exists
17:53:23:293 | RL | INFO | +16 | Main - CRC Check - CRC matches, this is an official unedited module.
17:53:23:293 | RL | INFO | +0 | Main - Super Smash Bros. Melee (USA) (En,Ja) (v1.00) will use module: C:\RocketLauncher\Modules\Dolphin\Dolphin.ahk
17:53:23:299 | RL | WARNING | +0 | RIniLoadVar - Created missing Global ini key: "Fade_Click_Through " in section: "Fade" in "C:\RocketLauncher\Settings\Global RocketLauncher.ini"
17:53:23:299 | RL | WARNING | +0 | RIniLoadVar - Created missing System ini key: "Fade_Click_Through " in section: "Fade" in "C:\RocketLauncher\Settings\Nintendo GameCube\RocketLauncher.ini"
17:53:23:335 | RL | INFO | +46 | Main - Using standard method with "Rom Extension" SkipChecks or without any SkipChecks.
17:53:23:340 | RL | INFO | +0 | CheckFile - Checking if C:\Emulators\Dolphin\Dolphin.exe exists
17:53:23:369 | RL | INFO | +32 | Main - INI Keys read
17:53:23:370 | RL | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\Module Extensions\7z.exe exists
17:53:23:371 | RL | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\Module Extensions\7z.dll exists
17:53:23:379 | RL | INFO | +15 | Main - "Super Smash Bros. Melee (USA) (En,Ja) (v1.00)" does not qualify for MultiGame. Only roms with any of these strings in their name are acceptable: \(Disc|\(Disk|\(Cart|\(Tape|\(Cassette|\(Part|\(Side
17:53:23:379 | RL | INFO | +0 | CheckPaths - Started
17:53:23:380 | RL | INFO | +0 | CheckPaths - Not scanning to find the rom because a full path was supplied to RocketLauncher via CLI
17:53:23:380 | RL | INFO | +0 | CheckPaths - Ended
17:53:23:381 | RL | INFO | +0 | BuildScript - User Variables:
;----------------------------------------------------------------------------
; INJECTED VARIABLES
;----------------------------------------------------------------------------
#NoTrayIcon
#InstallKeybdHook
MiscUtils.DetectHiddenWindows("On")
SetTitleMatchMode, 2
SendMode, Event
0 = 4
rlPath = C:\RocketLauncher
pluginPath = C:\RocketLauncher\Plugins
pluginName = RocketLauncherUI
pluginExt = .plugin
contextOnExit =
rlMode =
rlTitle = RocketLauncher
rlVersion = 1.1.1.1
rlAuthor = djvj
rlURL = www.rlauncher.com
langFile = C:\RocketLauncher\Data\Language\Localization.ini
primMonitor = 1
frontendPID = 0
frontendPath = C:\RocketLauncher\RocketLauncherUI
frontendExe = RocketLauncherUI.exe
frontendExt = exe
frontendName = RocketLauncherUI
frontendDrive = C
exitEmulatorKey = Esc|1joy7&1joy8|2joy7&2joy8
restoreFE = false
exitScriptKey = ~q & ~s
toggleCursorKey = ~e & ~t
emuFullPath = C:\Emulators\Dolphin\Dolphin.exe
emuPath = C:\Emulators\Dolphin
emuName = Dolphin
emuExt = exe
baseRomPath =
romPath = G:\Games\Nintendo Gamecube
romPathFromIni = G:\Games\Nintendo Gamecube
romExtension = .iso
romExtensionOrig = .iso
romExtensions = 7z|zip|wbfs|ciso|iso|elf|dol|gcm|wad
executable = Dolphin.exe
systemDbName = Nintendo GameCube
systemName = Nintendo GameCube
dbPath = G:\Games\Nintendo Gamecube
dbName = Super Smash Bros. Melee (USA) (En,Ja) (v1.00)
dbExt = iso
romName = Super Smash Bros. Melee (USA) (En,Ja) (v1.00)
romMapPath =
romMappingEnabled = false
romMappingLaunchMenuEnabled = false
romMappingFirstMatchingExt = false
romMappingShowAllRomsInArchive = true
romMappingNumberOfGamesByScreen = 7
romMappingHideParent = false
romMappingMenuWidth = 400
romMappingMenuMargin = 65
romMappingTextFont = Bebas Neue
romMappingTextOptions = cFFFFFFFF r4 s60 Bold
romMappingDisabledTextColor = ff888888
romMappingTextSizeDifference = 7
romMappingTextMargin = 15
romMappingTitleTextFont = Bebas Neue
romMappingTitleTextOptions = cFFFFFFFF r4 s90 Bold
romMappingTitle2TextFont = Bebas Neue
romMappingTitle2TextOptions = cFFFFFFFF r4 s22 Bold
romMappingGameInfoTextFont = Bebas Neue
romMappingGameInfoTextOptions = cFFFFFFFF r4 s22 Regular
romMappingGameNameTextFont = Bebas Neue
romMappingGameNameTextOptions = cFFFFFFFF r4 s40 Regular
romMappingBackgroundBrush = aa000000
romMappingColumnBrush = 33000000
romMappingButtonBrush1 = 6f000000
romMappingButtonBrush2 = 33000000
romMappingBackgroundAlign = Stretch and Lose Aspect
romMappingMenuFlagWidth = 55
romMappingMenuFlagSeparation = 7
romMappingDefaultMenuList = FullList
romMappingSingleFilteredRomAutomaticLaunch = false
altArchiveNameOnly =
altRomNameOnly =
altArchiveAndRomName =
altArchiveAndManyRomNames =
altRomNamesOnly =
romMapScenario =
skipchecks = false
romMatchExt = false
blockInputTime = 0
blockInputFile = C:\RocketLauncher\Module Extensions\BlockInput.exe
errorLevelReporting = false
lockLaunch = false
lockLaunchGame =
screenRotationAngle = 0
screenRotationAngleGame =
setResolution =
logFile =
logLabel := [" INFO"," WARNING"," ERROR"," DEBUG"," TRACE"]
logLevel = 3
logShowDebugConsole = false
logShowCommandWindow = false
logCommandWindow = false
logIncludeModule = true
logIncludeFileProperties = true
logIncludeDLLLogs = false
errorSounds = true
rlDebugConsoleStdout =
sysLang = English_United_States
sysType = 64-bit
broadcastWindowTitle =
navUpKey = Up
navDownKey = Down
navLeftKey = Left
navRightKey = Right
navSelectKey = Enter
navP2UpKey = Numpad8
navP2DownKey = Numpad2
navP2LeftKey = Numpad4
navP2RightKey = Numpad6
navP2SelectKey = NumpadEnter
originalWidth = 1920
originalHeight = 1080
vdEnabled = false
vdFullPath =
vdUseSCSI = true
vdDriveLetter =
vdDriveLetterScsi =
vdAddDrive = true
demulShooterPath =
servoStikEnabled = false
servoStikExitMode = false
ledblinkyEnabled = false
ledblinkySystemName =
ledblinkyFullPath =
ledblinkyProfilePath = C:\RocketLauncher\Profiles\LEDBlinky
ledblinkyRLProfile = C:\RocketLauncher\Profiles\LEDBlinky\RocketLauncher
winIPACFullPath =
ultraMapEnabled = false
ultraMapFullPath =
emuIdleShutdown = 0
launchPasswordHash = UpUpDownDownLeftRightLeftRight
hideCursor = false
hideEmu = false
hideFE = false
suspendFE = false
fadeIn = false
fadeInDuration = 500
fadeInTransitionAnimation = DefaultAnimateFadeIn
fadeInDelay = 0
fadeInExitDelay = 0
fadeOutExitDelay = 0
fadeOut = false
fadeOutExtraScreen = false
fadeOutDuration = 500
fadeOutTransitionAnimation = DefaultAnimateFadeOut
fadeOutDelay = 0
fadeLyrInterpolation = 7
fadeMuteEmulator = false
fadeUseBackgrounds = false
fadeClickThrough = false
fadeSounds = true
fade7zProgressMode = extraction
fadeWidthBaseRes = 1920
fadeHeightBaseRes = 1080
fadeLyr1Color = FF000000
fadeLyr1AlignImage = Stretch and Lose Aspect
fadeLyr2Pos = Stretch and Lose Aspect
fadeLyr2X = 0
fadeLyr2Y = 0
fadeLyr2W =
fadeLyr2H =
fadeLyr2Adjust = 1
fadeLyr2PicPad = 0
fadeLyr2Prefix = Extra Layer 1 - Console
fadeLyr3Pos = Center
fadeLyr3X = 450
fadeLyr3Y = 450
fadeLyr3W =
fadeLyr3H =
fadeLyr3Adjust = 1
fadeLyr3PicPad = 0
fadeLyr3Speed = 750
fadeLyr3Animation = DefaultFadeAnimation
fadeLyr37zAnimation = DefaultFadeAnimation
fadeLyr3Type = imageandbar
fadeLyr3ImgFollow7zProgress = true
fadeLyr3Repeat = 1
fadeLyr3BackImageTransparency = 30
fadeLyr3StaticPos = No Alignment
fadeLyr3StaticX = 0
fadeLyr3StaticY = 870|1575
fadeLyr3StaticW =
fadeLyr3StaticH =
fadeLyr3StaticAdjust = 1
fadeLyr3StaticPicPad = 0
fadeLyr3StaticPrefix = Info Bar
fadeLyr4Adjust = 1
fadeLyr4X = 1792|952
fadeLyr4Y = 891|1596
fadeLyr4W = 128
fadeLyr4H =
fadeLyr4Pos = No Alignment
fadeLyr4FPS = 50
fadeLyr4PicPad = 0
fadeTranspGifColor = FFFFFF
fadeBarWindow = Image
fadeBarWindowX =
fadeBarWindowY =
fadeBarWindowW = 900
fadeBarWindowH =
fadeBarWindowR = 30
fadeBarWindowM = 30
fadeBarWindowHatchStyle = 8
fadeBar = 7zOnly
fadeProgressDuration = 0
fadeBarBack = true
fadeBarBackColor = FF555555
fadeBarH = 30
fadeBarR = 10
fadeBarColor = DD00BFFF
fadeBarHatchStyle = 8
fadeBarPercentageText = true
fadeBarInfoText = true
fadeBarXOffset = 0
fadeBarYOffset = 150
fadeRomInfoDescription = filtered text
fadeRomInfoSystemName = image
fadeRomInfoYear = text with label
fadeRomInfoDeveloper = text with label
fadeRomInfoPublisher = text with label
fadeRomInfoGenre = disabled
fadeRomInfoRating = image
fadeRomInfoOrder = Description|SystemName|Year|Developer|Genre|Rating|Publisher
fadeRomInfoTextPlacement = User Defined
fadeRomInfoTextMargin = 7
fadeRomInfoText1Options = w1600|787 h90 x165 y870|1575 cFFE1E1E1 r4 s90 Left Regular
fadeRomInfoText2Options = w400 x8 y15 cFF555555 r4 s60 Bold
fadeRomInfoText3Options = w310 x165 y960|1665 cFFE1E1E1 r4 s66 Left Regular
fadeRomInfoText4Options = w1305|492 h66 x460 y960|1665 cFFE1E1E1 r4 s66 Left Regular
fadeRomInfoText5Options = cFF555555 r4 s42 Bold
fadeRomInfoText6Options = h135 x15 y885|1590 cFFCFCFCA r4 s120 Regular
fadeRomInfoText7Options = h135 x15 y885|1590 cFFCFCFCA r4 s120 Regular
fadeStats_Number_of_Times_Played = text with label
fadeStats_Last_Time_Played = text with label
fadeStats_Average_Time_Played = text with label
fadeStats_Total_Time_Played = text with label
fadeStats_System_Total_Played_Time = text with label
fadeStats_Total_Global_Played_Time = text with label
fadeStatsInfoOrder = Number_of_Times_Played|Last_Time_Played|Average_Time_Played|Total_Time_Played|System_Total_Played_Time|Total_Global_Played_Time
fadeStatsInfoTextPlacement = topRight
fadeStatsInfoTextMargin = 7
fadeStatsInfoText1Options = cFFB4B4B4 r4 s22 Bold
fadeStatsInfoText2Options = cFFB4B4B4 r4 s22 Bold
fadeStatsInfoText3Options = cFFB4B4B4 r4 s22 Bold
fadeStatsInfoText4Options = cFFB4B4B4 r4 s22 Bold
fadeStatsInfoText5Options = cFFB4B4B4 r4 s22 Bold
fadeStatsInfoText6Options = cFFB4B4B4 r4 s22 Bold
fadeText1X = 0
fadeText1Y = 0
fadeText1Options = cFFB4B4B4 r4 s30 Right Bold
fadeText1 = Loading Game
fadeText2X = 0
fadeText2Y = 0
fadeText2Options = cFFB4B4B4 r4 s30 Right Bold
fadeText2 = Extraction Complete, Ready
fadeText3 = Loading Game
fadeText4 = Loading Complete
fadeFont = Bebas Neue
fadeSystemAndRomLayersOnly = false
fadeExtractionTime = disabled
fadeExtractionTimeTextX = 0
fadeExtractionTimeTextY = 0
fadeExtractionTimeTextOptions = cFF555555 r4 s20 Bold
fadeInterruptKey =
detectFadeErrorEnabled = true
fadeImgPath = C:\RocketLauncher\Media\Fade
RLDataPath = C:\RocketLauncher\Data
RLMediaPath = C:\RocketLauncher\Media
RLErrSoundPath = C:\RocketLauncher\Media\Sounds\Error
modulesPath = C:\RocketLauncher\Modules
moduleFullName = C:\RocketLauncher\Modules\Dolphin\Dolphin.ahk
moduleName = Dolphin
modulePath = C:\RocketLauncher\Modules\Dolphin
moduleExtension = ahk
moduleExtensionsPath = C:\RocketLauncher\Module Extensions
libPath = C:\RocketLauncher\Lib
sevenZEnabled = false
sevenZPath = C:\RocketLauncher\Module Extensions\7z.exe
sevenZDllPath = C:\RocketLauncher\Module Extensions\7z.dll
sevenZExtractPath = C:\Users\odonnellj\AppData\Local\Temp\HS
sevenZExtractPathOrig =
sevenZAttachSystemName = false
sevenZDelTemp = true
sevenZFormats = .zip|.rar|.7z|.lzh|.gzip|.tar
sevenZFormatsNoP = zip|rar|7z|lzh|gzip|tar
sevenZFormatsRegEx = \.zip|\.rar|\.7z|\.lzh|\.gzip|\.tar
7zExtractPath = C:\Users\odonnellj\AppData\Local\Temp\HS
mgEnabled = false
mgKey = ~NumpadSub
mgBackgroundColor = FF000000
mgSidePadding = 0.2
mgWidthBaseRes = 1920
mgHeightBaseRes = 1080
mgYOffset = 500|800
mgFont = Arial
mgText1Options = x10p y250|500 w80p Center cBBFFFFFF r4 s100 BoldItalic
mgText1Text = Please select a game
mgText2Options = w96p cFFFFFFFF r4 s50 Center BoldItalic
mgText2Offset = 100
mgUseSound = true
mgSoundfreq = 300
mgExitEffect = none
mgSelectedEffect = rotate
mgUseGameArt = false
mgCandidate =
mgValidTypes = \(Disc|\(Disk|\(Cart|\(Tape|\(Cassette|\(Part|\(Side
mgOnLaunch = false
pauseEnabled = false
pauseKey = ~NumpadAdd
pauseBackToMenuBarKey = X
pauseZoomInKey = C
pauseZoomOutKey = V
pauseScreenshotKey = ~PrintScreen
pauseHiToTextPath = C:\RocketLauncher\Module Extensions\HiToText.exe
pauseSaveStateKeyCodes = {Shift down}{F1 down}{F1 up}{Shift up}|{Shift down}{F2 down}{F2 up}{Shift up}|{Shift down}{F3 down}{F3 up}{Shift up}|{Shift down}{F4 down}{F4 up}{Shift up}|{Shift down}{F5 down}{F5 up}{Shift up}|{Shift down}{F6 down}{F6 up}{Shift up}|{Shift down}{F7 down}{F7 up}{Shift up}|{Shift down}{F8 down}{F8 up}{Shift up}
pauseLoadStateKeyCodes = {F1 down}{F1 up}|{F2 down}{F2 up}|{F3 down}{F3 up}|{F4 down}{F4 up}|{F5 down}{F5 up}|{F6 down}{F6 up}|{F7 down}{F7 up}|{F8 down}{F8 up}
keyboardEncoder =
keyboardEncoderEnabled = false
keymapperEnabled = false
keymapperAHKMethod = false
keymapper = xpadder
xpadderFullPath = C:\Utilities\Xpadder\xpadder.exe
joyToKeyFullPath = C:\Utilities\JoyToKey\JoyToKey.exe
profilePath = C:\RocketLauncher\Profiles
keymapperProfilePath = C:\RocketLauncher\Profiles\xpadder
keymapperFrontEndProfileName = RocketLauncherUI
keymapperFrontEndProfile = false
keymapperRocketLauncherProfileEnabled = false
joyIDsEnabled = false
joyIDsPreferredControllersGlobal =
joyIDsPreferredControllersSystem = use_global
joyIDsPreferredControllersOnExit =
CustomJoyNamesEnabled = false
CustomJoyNames =
rotateMethod = false
FEProfile = C:\RocketLauncher\Profiles\xpadder\RocketLauncherUI
defaultProfile = C:\RocketLauncher\Profiles\xpadder\_Default
systemProfile = C:\RocketLauncher\Profiles\xpadder\Nintendo GameCube
xPadderSystemProfile = C:\RocketLauncher\Profiles\xpadder\Nintendo GameCube\_Default
emuProfile = C:\RocketLauncher\Profiles\xpadder\Nintendo GameCube\Dolphin
romProfile = C:\RocketLauncher\Profiles\xpadder\Nintendo GameCube\Super Smash Bros. Melee (USA) (En,Ja) (v1.00)
RocketLauncherProfile = C:\RocketLauncher\Profiles\xpadder\RocketLauncher
blankProfile = C:\RocketLauncher\Profiles\xpadder\_Default\blank
ahkFEProfile = C:\RocketLauncher\Profiles\AHK\RocketLauncherUI
ahkDefaultProfile = C:\RocketLauncher\Profiles\AHK\_Default
ahkSystemProfile = C:\RocketLauncher\Profiles\AHK\Nintendo GameCube
ahkEmuProfile = C:\RocketLauncher\Profiles\AHK\Nintendo GameCube\Dolphin
ahkRomProfile = C:\RocketLauncher\Profiles\AHK\Nintendo GameCube\Super Smash Bros. Melee (USA) (En,Ja) (v1.00)
ahkRocketLauncherProfile = C:\RocketLauncher\Profiles\AHK\RocketLauncher
bezelEnabled = false
bezelICEnabled = false
shaderName = false
shaderColor =
shaderTransparency =
statisticsEnabled = true
pressDuration = -1
emuVolume = 1
dxwndIni = C:\RocketLauncher\Module Extensions\dxwnd\dxwnd.ini
dxwndFullPath = C:\RocketLauncher\Module Extensions\dxwnd\dxwnd.exe
qResFullPath = C:\RocketLauncher\Module Extensions\QRes.exe
mon1O =
pacDrivedllFile = C:\RocketLauncher\Module Extensions\PacDrive32.dll
userFadeAnimIniFile = C:\RocketLauncher\Lib\User Fade Animations.ini
testFile =
testDuration =
initialErrorMode = 0
17:53:23:387 | RL | INFO | +0 | BuildScript - Loaded XHotkey Init.ahk scripts
17:53:23:387 | RL | INFO | +0 | BuildScript - Loaded Statistics Init.ahk scripts
17:53:23:388 | RL | WARNING | +0 | BuildScript - "C:\RocketLauncher\Lib\User Functions Init.ahk" not found
17:53:23:388 | RL | INFO | +0 | BuildScript - Validating module
17:53:23:394 | RL | INFO | +0 | BuildScript - Validation complete
17:53:23:394 | RL | INFO | +0 | BuildScript - Module:
MEmu = Dolphin
MEmuV = v4.0 r6928
MURL = https://dolphin-emu.org/
MAuthor = djvj & bleasby
MVersion = 2.1.9
MCRC = 48F41AEA
iCRC = F063B9AF
MID = 635038268884477733
MSystem = "Nintendo Gamecube","Nintendo Wii","Nintendo WiiWare"
;----------------------------------------------------------------------------
; Notes:
; Be sure you are running at least Dolphin v4.0 or greater.
; If you get an error that you are missing a vcomp100.dll, install Visual C++ 2010: http://www.microsoft.com/download/en/details.aspx?id=14632
; Also make sure you are running latest directx: http://www.microsoft.com/downloads/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3
; Dolphin will sometimes crash when connnecting a Wiimote, then going back to the game. After all Wiimotes are connected that you want to use, it shouldn't have anymore issues.
; Convert all your games to ciso using Wii Backup Manager to save alot of space by stripping everything but the game partition. http://www.wiibackupmanager.tk/
; If you want to keep your Dolphin.ini in the emu folder, create a "portable.txt" file in MyDocuments\Dolphin Emulator\
;
; Bezels:
; If the game does not fit the window, you can try setting stretch to window manually in dolphin.
;
; Setting up custom Wiimote or GCPad profiles:
; First set UseCustomWiimoteProfiles or UseCustomGCpadProfiles to true in RocketLauncherUI for this module
; Launch Dolphin manually and goto Options->(Wiimote or Gamecube Pad) Settings and configure all your controls how you want your default setup to look like. This will be used for all games that you don't set a custom profile for. No need to save any profiles.
; All your controls are stored in WiimoteNew.ini or GCPadNew.ini and get copied to a _Default_(WiimoteNew or GCPadNew).ini on first launch. This ini contains all the controls for all 4 controllers.
; Do not confuse this with Dolphin's built-in profiles as those only contain info for only one controller. The (WiimoteNew or GCPadNew).ini and all the profiles RocketLauncher uses contain info for all controllers in one file.
; This new profile now called _Default_(WiimoteNew or GCPadNew).ini will be found in Dolphins settings folder: \Config\Profiles\(Wiimote or GCPad) (RL)\Default.ini
; For each game or custom control sets you want to use, edit the controls for all the controllers to work for that game and exit Dolphin. Now copy the (WiimoteNew or GCPadNew).ini to the "(Wiimote or GCPad) (RL)" folder and name it whatever you like.
; In RocketLauncherUI's module settings for Dolphin, Click the Rom Settings tab and add each game from your xml you want to use a this custom profile for.
; Now for all those games you added, make sure the Profile setting it set to the custom profile you want to load when that game is launched.
; Any game not added will use the "_Default_(WiimoteNew or GCPadNew).ini" profile RocketLauncher makes on first launch.
;
; To Pair a Wiimote:
; Highly suggest getting a Mayflash DolphinBar as it makes pairing and using wiimotes as easy as with a real Wii: http://www.amazon.com/TOTALCONSOLE-W010-Wireless-Sensor-DolphinBar/dp/B00HZWEB74
; If using the DolphinBar, just make sure Dolphin is set to continuously scan for wiimotes and set controls to use real wiimotes for as many wiimotes you have.
; You do not need to pair the wiimote with the PC first as you would with a standard blueooth and wiimote.
; DolphinBar should be on Mode 4. Wiimotes don't get paired until after Dolphin is running, not before!!
; After Dolphin is running, press 1+2 on each wiimote and after a few moments, the wiimote will pair and vibrate and one led will lock solid. Do this for each wiimote. That's it!
;
; If using a standard LED Bar:
; Make sure all your wiimotes have already been paired with your PC's bluetooth adapter
; All 4 leds on the wiimote should be flashing
; Press your Refresh key (set in RocketLauncherUI for this module) or enable continuous scanning in Dolphin
; Press 1 + 2 on the wiimote and one led should go solid designating the player number
;
; MultiGame:
; Currently unable to get disc swapping to work. See MultiGame section below for additional details.
;
; Netplay:
; If you're using a GameCube game with saves, synchronize your memory cards, Wii NAND needs to be synchronized, and some settings (such as CPU Clock Override) must be either synchronized or disabled.
; Because netplay may require different settings than you would normally use with local play, the module will look for any inis in your Dolphin user config folder ending with "_netplay" and use those configs instead of your normal ones.
; So for example, after you tweak all your dolphin settings for netplay, copy your dolphin.ini to dolphin_netplay.ini in the same folder.
; When the module launches and you choose multiplayer from RocketLauncher on screen menu, the module will backup dolphin.ini and copy dolphin_network.ini to dolphin.IniDelete
; On exit, the module will restore your backed up dolphin.ini and any other ini files in this folder (and all subfolders) that had the "_netplay" in the name.
; Guide on tweaking performance for netplay: https://dolphin-emu.org/docs/guides/netplay-guide/
; Another guide: https://docs.google.com/document/d/1CIkBAGcf_-kBUa4urn4KUj2U4UA6y_2a7stXJz85yiE/
;
; Linking a GameCube game with VBA-M
; Game tested: Legend of Zelda, The - Four Swords Adventures (USA)
; VBA-M emulator tested: visualboyadvance-m2.0.0Beta1
; dolphin emulator tested: dolphin-master-4.0-6725-x64
; On RocketLaunchUI, dolphin, GameCube Module settings set your VBA-M executable and VBA Bios file path on the VBALink tab.
; On RocketLaunchUI, dolphin, GameCube, Game name Module Settings enable VBA Link
; If your Game Boy Advanced Windows appear frozen after the RocketLauncher fade screen loads, increase the value of the VBADelay on GameCube, VBALink settings. Default value is 500 milliseconds.
; A game with one VBA window will use a two screens bezel file, Bezel [2S].png, the first screen for the GameCube game and the second one for the VBA screen. Two VBAs = Bezel [3S].png, again first screen for the GameCube game and second and third for the VBA screens, and so on.
;----------------------------------------------------------------------------
StartModule()
BezelGui()
FadeInStart()
primaryExe := new Emulator(emuPath . "\" . executable) ; instantiate emulator executable object
Fullscreen := moduleIni.Read("Settings", "Fullscreen","true","",1)
UseCustomWiimoteProfiles := moduleIni.Read("Settings", "UseCustomWiimoteProfiles","false","",1) ; set to true if you want to setup custom Wiimote profiles for games
UseCustomGCPadProfiles := moduleIni.Read("Settings", "UseCustomGCPadProfiles","false","",1) ; set to true if you want to setup custom GCPad profiles for games
HideMouse := moduleIni.Read("Settings", "HideMouse","true","",1) ; hides mouse cursor in the emu options
RefreshKey := moduleIni.Read("Settings", "RefreshKey","","",1) ; hotkey to "Refresh" Wiimotes, delete the key to disable it
Timeout := moduleIni.Read("Settings", "Timeout","5","",1) ; amount in seconds we should wait for the above hotkeys to timeout
renderToMain := moduleIni.Read("Settings", "Render_To_Main","false","",1)
enableNetworkPlay := moduleIni.Read("Network", "Enable_Network_Play","false","",1)
;options to Gamecube and VBA Link
enableVBALink := moduleIni.Read(romName, "enableVBALink", "false","",1)
VBAExePath := moduleIni.Read("VBA Link", "VBAExePath","","",1)
VBABiosPath := moduleIni.Read("VBA Link", "VBABiosPath","","",1)
VBADelay := moduleIni.Read("VBA Link", "VBADelay", 500,"",1)
If (renderToMain = "true") {
emuPrimaryWindow := new Window(new WindowTitle("Dolphin","wxWindowNR")) ; instantiate primary emulator window object
emuGameWindow := emuPrimaryWindow
} Else {
emuPrimaryWindow := new Window(new WindowTitle("Dolphin","wxWindowNR")) ; instantiate primary emulator window object
emuPrimaryWindow.ExcludeTitle := "FPS" ; when main window doesn't have the game, FPS will not be on the title bar
emuGameWindow := new Window(new WindowTitle("FPS","wxWindowNR"))
}
emuPrimaryWindow := new Window(new WindowTitle("Dolphin","wxWindowNR")) ; instantiate primary emulator window object
emuGameWindow := If renderToMain = "true" ? emuPrimaryWindow : new Window(new WindowTitle("FPS","wxWindowNR")) ; Older dolphins used "FPS ahk_class wxWindowClassNR"
emuScanningWindow := new Window(new WindowTitle("Scanning for ISOs","#32770"))
emuNetPlaySetupWindow := new Window(new WindowTitle("Dolphin NetPlay Setup","wxWindowNR"))
emuNetPlayWindow := new Window(new WindowTitle("Dolphin NetPlay","wxWindowNR"))
emuWiimoteWindow := new Window(new WindowTitle("Dolphin Controller Configuration","#32770"))
emuOpenROMWindow := new Window(new WindowTitle("Select","#32770"))
emuErrorWindow1 := new Window(new WindowTitle("Warning","#32770"))
emuErrorWindow2 := new Window(new WindowTitle("Error","#32770"))
emuWiimoteWindow.CreateControl("OK")
; Determine where Dolphin is storing its ini, this will act as the base folder for settings and profiles related to this emu
dolphinININewPath := new File(A_MyDocuments . "\Dolphin Emulator\Config\Dolphin.ini") ; location of Dolphin.ini for v4.0+
dolphinINIOldPath := new File(emuPath . "\User\Config\Dolphin.ini") ; location of Dolphin.ini prior to v4.0
portableTxtFile := new File(emuPath . "\portable.txt")
If (!portableTxtFile.Exist() && dolphinININewPath.Exist())
{ dolphinBasePath := A_MyDocuments . "\Dolphin Emulator"
RLLog.Info("Module - Dolphin's base settings folder is not portable and found in: " . dolphinBasePath)
} Else If (portableTxtFile.Exist() || dolphinINIOldPath.Exist())
{ dolphinBasePath := emuPath . "\User"
RLLog.Info("Module - Dolphin's base settings folder is portable and found in: " . dolphinBasePath)
} Else
ScriptError("Could not find your Dolphin.ini in either of these folders. Please run Dolphin manually first to create it.`n" . dolphinINIOldPath.FileFullPath . "`n" . dolphinININewPath.FileFullPath)
dolphinINI := new IniFile(dolphinBasePath . "\Config\Dolphin.ini")
If (enableVBALink = "true"){
VBAExePath := AbsoluteFromRelative(EmuPath, VBAExePath)
VBABiosPath := AbsoluteFromRelative(EmuPath, VBABiosPath)
StringUtils.SplitPath(VBAExePath, VBAFile, VBAPath)
SelectedNumberofPlayers := NumberOfPlayersSelectionMenu(4)
If (SelectedNumberofPlayers = 1) {
enableVBALink := "false"
} Else {
; backup original ini
dolphinINIBackup := new File(dolphinBasePath . "\Config\Dolphin_Backup.ini")
dolphinINI.Copy(dolphinINIBackup.FileFullPath)
Loop, % SelectedNumberofPlayers
{ tempCount := A_Index-1
dolphinINI.Write(5, "Controls", PadType%tempCount%)
}
}
}
If (enableVBALink = "true")
BezelStart(SelectedNumberofPlayers+1)
Else
BezelStart()
If (enableVBALink = "true" and !bezelPath) ; disabling fullscreen if VBA Link mode
Fullscreen := "false"
If (renderToMain = "true" && (enableVBALink = "true" || bezelEnabled = "true")) { ; disabling toolbar and statusbar if bezels or vba link is used as it will show when rendering to the main window
dolphinINI.Write("False", "Interface", "ShowToolbar")
dolphinINI.Write("False", "Interface", "ShowStatusbar")
}
If (renderToMain = "true")
hideEmuObj := Object(emuScanningWindow,0,emuNetPlayWindow,0,emuNetPlaySetupWindow,0,emuErrorWindow1,0,emuErrorWindow2,0,emuGameWindow,1)
Else
hideEmuObj := Object(emuScanningWindow,0,emuNetPlayWindow,0,emuNetPlaySetupWindow,0,emuErrorWindow1,0,emuErrorWindow2,0,emuPrimaryWindow,0,emuGameWindow,1)
7z(romPath, romName, romExtension, sevenZExtractPath)
If StringUtils.Contains(romExtension,"\.zip|\.7z|\.rar")
ScriptError(MEmu . " does not support compressed roms. Please enable 7z support in RocketLauncherUI to use this module/emu.")
If RefreshKey {
RefreshKey := xHotKeyVarEdit(RefreshKey,"RefreshKey","~","Add")
xHotKeywrapper(RefreshKey,"RefreshWiimote")
}
Fullscreen := If Fullscreen = "true" ? "True" : "False"
HideMouse := If HideMouse = "true" ? "True" : "False"
networkSession := ""
If (enableNetworkPlay = "true") {
RLLog.Info("Module - Network Multi-Player is an available option for " . dbName)
dolphinNickname := dolphinINI.Read("NetPlay", "Nickname")
dolphinAddress := dolphinINI.Read("NetPlay", "Address")
dolphinCPort := dolphinINI.Read("NetPlay", "ConnectPort")
dolphinHPort := dolphinINI.Read("NetPlay", "HostPort")
netplayNickname := moduleIni.Read("Network", "NetPlay_Nickname","Player","",1)
getWANIP := moduleIni.Read("Network", "Get_WAN_IP","false","",1)
networkPlayers := 4 ; Max amount of networkable players
If (getWANIP = "true")
myPublicIP := GetPublicIP()
defaultServerIP := moduleIni.Read("Network", "Default_Server_IP", myPublicIP,"",1)
defaultServerPort := moduleIni.Read("Network", "Default_Server_Port","","",1)
lastIP := moduleIni.Read("Network", "Last_IP", defaultServerIP,"",1) ; does not need to be on the ISD
lastPort := moduleIni.Read("Network", "Last_Port", defaultServerPort,"",1) ; does not need to be on the ISD
If (netplayNickname != dolphinNickname)
dolphinINI.Write(netplayNickname, "NetPlay", "Nickname")
MultiplayerMenu(lastIP,lastPort,networkType,networkPlayers,0)
If networkSession {
RLLog.Info("Module - Using a Network for " . dbName)
restoreIniObject := Object() ; initialize object
currentObj := ""
dolphinConfigPath := dolphinBasePath . "\Config"
Loop, % dolphinConfigPath . "\*.ini"
{
If StringUtils.InStr(A_LoopFileName, "_netplay.ini","","","",0) {
RLLog.Info("Module - Found a network specific ini: " . A_LoopFileFullPath)
networkIni%A_Index%File := new File(A_LoopFileFullPath)
originalIni%A_Index%File := new File(StringUtils.RegExReplace(A_LoopFileFullPath, "_netplay","","",-1,15))
backupIni%A_Index%File := new File(originalIni%A_Index%File.FileFullPath . ".backup")
originalIni%A_Index%File.Move(backupIni%A_Index%File,1) ; backup original ini
networkIni%A_Index%File.Copy(originalIni%A_Index%File) ; copy network ini to original name
}
}
moduleIni.Write(lastPort, "GlobalModuleIni", "Network", "Last_Port")
If (networkType = "client") {
moduleIni.Write(lastIP, "GlobalModuleIni", "Network", "Last_IP") ; Save last used IP and Port for quicker launching next time
dolphinINI.Write(lastIP, "Network", "Address")
dolphinINI.Write(lastPort, "Network", "ConnectPort")
} Else ; server
dolphinINI.Write(lastPort, "Network", "HostPort")
dolphinINI.Write(romPath, "Network", "ISOPath0") ; makes browser only show the one game we want to play
dolphinINI.Write(1, "General", "ISOPaths") ; makes browser only show the first path set
dolphinINI.Write(romPath . "\" . romName . romExtension, "General", "LastFilename")
RLLog.Info("Module - Starting a network session using the IP """ . networkIP . """ and PORT """ . networkPort . """")
} Else
RLLog.Info("Module - User chose Single Player mode for this session")
}
gcSerialPort := 5 ; this puts the BBA network adapter into the serial port. If previous launch was Triforce, AM-Baseboard would be set here and would result in Unknown DVD command errors
; Compare existing settings and if different than desired, write them to the emulator's ini
dolphinINI.Write(Fullscreen, "Display", "Fullscreen", 1)
dolphinINI.Write(renderToMain, "Display", "RenderToMain", 1)
dolphinINI.Write(HideMouse, "Interface", "HideCursor", 1)
dolphinINI.Write("False", "Interface", "ConfirmStop", 1)
dolphinINI.Write("False", "Interface", "UsePanicHandlers", 1)
dolphinINI.Write(gcSerialPort, "Core", "SerialPort1", 1)
; Load default or user specified Wiimote or GCPad profiles for launching
If (StringUtils.InStr(systemName, "wii") && UseCustomWiimoteProfiles = "true")
ChangeDolphinProfile("Wiimote")
If (UseCustomGCPadProfiles = "true")
ChangeDolphinProfile("GCPad")
HideAppStart(hideEmuObj,hideEmu)
If networkSession
primaryExe.Run() ; must be launched w/o /b for browser list to work
Else
primaryExe.Run(" /b /e """ . romPath . "\" . romName . romExtension . """") ; /b = batch (exit dolphin with emu), /e = load file
emuGameWindow.Wait()
emuGameWindow.Get("ID")
emuGameWindow.WaitActive()
If networkSession {
RLLog.Info("Module - Opening NetPlay window")
; Get the 6-letter ID of the game
If (romExtension = ".wbfs")
gameID := RLObject.readFileData(romPath . "\" . romName . romExtension,512,6,"UTF8")
Else If (romExtension = ".iso")
gameID := RLObject.readFileData(romPath . "\" . romName . romExtension,0,6,"UTF8")
Else If (romExtension = ".ciso")
gameID := RLObject.readFileData(romPath . "\" . romName . romExtension,32768,6,"UTF8")
; Must wait for Dolphin to finish scanning isos before netplay window can be opened so the game list is populated. Opening too early and the game list will be blank or partially filled.
If emuScanningWindow.Exist()
emuScanningWindow.WaitClose(60) ; wait 60 seconds max. hopefully doesn't take longer than that to scan your isos...
Else {
errlvl := emuScanningWindow.Wait(5) ; wait 5 seconds max to appear
If errlvl
RLLog.Info("Module - Timed out waiting for ""Scanning for ISOs"" window to appear. It may have finished before it could be detected, moving on.")
Else
RLLog.Info("Module - ""Scanning for ISOs"" window found.")
}
emuPrimaryWindow.MenuSelectItem("Tools", "Start NetPlay")
matchMode := A_TitleMatchMode ; store for restoration later
MiscUtils.SetTitleMatchMode(3) ; changes match mode so title must match exactly
emuNetPlaySetupWindow.Wait()
emuNetPlaySetupWindow.WaitActive()
emuNetPlayWindow.ExcludeTitle := emuNetPlaySetupWindow.WinTitle.GetWIndowTitle() ; set emuNetPlayWindow exclude title for the below command
If (networkType = "client") {
RLLog.Info("Module - Clicking Connect button")
emuNetPlaySetupWindow.CreateControl("Button1") ; instantiate new control for button1
emuErrorWindow1.CreateControl("Button1")
emuErrorWindow2.CreateControl("Button1")
While !breakLoops {
emuNetPlaySetupWindow.GetControl("button1").Click() ; click connect button
RLLog.Info("Module - Waiting for Host to start game")
errlvl := emuNetPlayWindow.Wait(2) ; waits 2 seconds
If errlvl { ; 1 if timed out, now check for any error windows and close them
Loop, 2 ; loop through both error windows
If emuErrorWindow%A_Index%.Exist() ; error windows that can appear when host is not running yet
emuErrorWindow%A_Index%.GetControl("button1").Click() ; click ok to clear the error
RLLog.Info("Module - Host not running yet, trying again")
Continue
} Else { ; window exists
RLLog.Info("Module - Connected to host, waiting for host to start game")
Break
}
}
} Else { ; server
emuNetPlayWindow.CreateControl("ListBox1") ; create a control called ListBox1
emuNetPlayWindow.CreateControl("Button8") ; create a control called Button8 (the Host's Start button)
emuNetPlaySetupWindow.CreateControl("ListBox1") ; create a control called ListBox1
emuNetPlaySetupWindow.CreateControl("Button3") ; create a control called Button3 (the Host button)
emuNetPlaySetupWindow.GetControl("ListBox1").Get("List") ; Get the text from the ListBox
loopList := emuNetPlaySetupWindow.GetControl("ListBox1").List ; can't use this object directly on the Parse Loop below
Loop, Parse, loopList, `n
{
If StringUtils.InStr(A_Loopfield, gameID,"","","",0) {
idLocation := A_Index ; record the location in the ListBox of our game
RLLog.Info("Module - Game list shows """ . A_LoopField . """ as item " . A_Index) ; logging each items in ListBox
}
}
If !idLocation { ; game was not found in list
ScriptError("Could not find your """ . romName . """ in the game selection window for netplay. Possibly the gameID could not be found in your game. Please check your the RocketLauncher log and report this error.",,,,,1)
Gosub, CloseProcess
FadeInExit()
Goto, CloseDolphin
}
emuNetPlaySetupWindow.GetControl("ListBox1").Control("Choose",idLocation) ; selects our game in the ListBox
RLLog.Info("Module - Clicking Host button")
emuNetPlaySetupWindow.GetControl("Button3").Click() ; click host button
emuNetPlayWindow.Wait() ; this window should now appear when hosted correctly
RLLog.Info("Module - Waiting for " . networkPlayers . " players until the game is started")
While !breakLoops {
emuNetPlayWindow.GetControl("ListBox1").Get("List") ; Get the text from the ListBox
If StringUtils.InStr(emuNetPlayWindow.GetControl("ListBox1").List,"[" . networkPlayers . "]","","","",0) {
RLLog.Info("Module - All players have joined, starting game")
Break
}
TimerUtils.Sleep(100,0)
}
emuNetPlayWindow.GetControl("Button8").Click() ; click Start button
}
MiscUtils.SetTitleMatchMode(matchMode) ; restore old match mode
}
If (enableVBALink = "true") {
vbaINI := new IniFile(VBAPath . "\vbam.ini")
vbaINI.CheckFile()
vbaINIBackup := new File(VBAPath . "\vbam_Backup.ini")
vbaINI.Copy(vbaINIBackup.FileFullPath)
;removing fullscreen from VBA-M
vbaINI.Write(0, "preferences", "fullScreen")
;setting other VBA-M ini options
VBABiosPathDoubleSlash := StringUtils.Replace(VBABiosPath,"\","\\","all")
vbaINI.Write(0, "preferences", "pauseWhenInactive")
vbaINI.Write(VBABiosPathDoubleSlash, "GBA", "BiosFile")
vbaINI.Write(1, "GBA", "LinkAuto")
vbaINI.Write("127.0.0.1", "GBA", "LinkHost")
vbaINI.Write(3, "GBA", "LinkType")
vbaINI.Write(SelectedNumberofPlayers, "preferences", "LinkNumPlayers")
vbaINI.Write(1, "preferences", "useBiosGBA")
vbaINI.Write(1, "Display", "Stretch")
vbaINI.Write(1, "Display", "Scale")
;running VBA-M
Loop % SelectedNumberofPlayers {
currentScreen := A_Index + 1
VBA%currentScreen%Exe := new Process(VBAExePath) ; instantiate a new process for each instance of VBA we need to run
VBA%currentScreen%Exe.Run(" """ . VBABiosPath . """")
; msgbox % "PID: " . VBA%A_Index%Exe.PID . "`nVBABiosPath: " . VBABiosPath
VBA%currentScreen%Window := new Window(new WindowTitle("","","","",VBA%currentScreen%Exe.PID))
VBA%currentScreen%Window.Wait()
TimerUtils.Sleep(VBADelay,0)
bezelBottomOffsetScreen%currentScreen% := 24 ; to hide emu bottom bar
}
;waiting for VBA-M windows bios loading
timeout := A_TickCount
VBAGBABiosWindow := new Window(new WindowTitle("gba_bios - VisualBoyAdvance-M"))
Loop {
VBAGBABiosWindow.Get("List") ; Get a list of all vba-m hwnd IDs
If (VBAGBABiosWindow.List[0] = SelectedNumberofPlayers){
Loop % VBAGBABiosWindow.List[0] { ; loop through each vba-m window
currentScreen := A_Index + 1
Screen%currentScreen%ID := VBAGBABiosWindow.List[A_Index] ; record each vba-m window's hwnd ID
}
RLLog.Info("Module - gba_bios Loaded")
Break
}
If (timeout < A_TickCount - 10000) {
RLLog.Warning("Module - Timed out waiting gba_bios to load")
Break
}
TimerUtils.Sleep(100,0)
}
;Resizing Windows to fill screen if no bezel file is found
If !(bezelPath) {
Loop % (SelectedNumberofPlayers + 1) {
If (A_Index = 1) { ; the main Dolphin window
X1 := 0
Y1 := 0
W1 := A_ScreenWidth//2
H1 := A_ScreenHeight
emuGameWindow.WinTitle.PID := "" ; remove PID from object's WinTitle so only the window hwnd ID is acted upon
emuGameWindow.RemoveBorder()
emuGameWindow.RemoveTitlebar()
emuGameWindow.ToggleMenu()
emuGameWindow.Move(X1,Y1,W1,H1)
} Else { ; the vba-m windows
X%A_Index% := A_ScreenWidth//2
Y%A_Index% := (A_Index-2)*(A_ScreenHeight//SelectedNumberofPlayers)
W%A_Index% := A_ScreenWidth//2
H%A_Index% := (A_ScreenHeight//SelectedNumberofPlayers)+bezelBottomOffsetScreen%A_Index%
VBA%A_Index%Window.WinTitle.ID := Screen%A_Index%ID ; set ID of window into object
VBA%A_Index%Window.WinTitle.PID := "" ; remove PID from object's WinTitle so only the window hwnd ID is acted upon
VBA%A_Index%Window.RemoveBorder()
VBA%A_Index%Window.RemoveTitlebar()
VBA%A_Index%Window.ToggleMenu()
VBA%A_Index%Window.Move(X%A_Index%,Y%A_Index%,W%A_Index%,H%A_Index%)
}
}
TimerUtils.Sleep(50)
Loop % SelectedNumberofPlayers {
currentScreen := A_Index + 1
VBA%currentScreen%Window.Activate() ; put focus on all the VBA windows
}
VBA1Window.Activate() ; put focus on the first VBA window
}
}
BezelDraw()
emuGameWindow.Activate()
HideAppEnd(hideEmuObj,hideEmu)
FadeInExit()
primaryExe.Process("WaitClose")
CloseDolphin:
If networkSession {
Loop {
If !IsObject(backupIni%A_Index%File)
Break
RLLog.Info("Module - Restoring the original ini: " . backupIni%A_Index%File.FileFullPath . " to " . originalIni%A_Index%File.FileFullPath)
backupIni%A_Index%File.Move(originalIni%A_Index%File.FileFullPath,1) ; restore all backed up inis
}
}
7zCleanUp()
BezelExit()
FadeOutExit()
ExitModule()
ChangeDolphinProfile(profileType) {
Global settingsFile,romName,dolphinBasePath,RLLog,moduleIni
profile := moduleIni.Read(romName, "profile", "Default","",1)
RLProfilePath := new Folder(dolphinBasePath . "\Config\Profiles\" . profileType . " (RL)")
currentProfileFile := new File(dolphinBasePath . "\Config\" . profileType . "New.ini")
defaultProfileFile := new File(RLProfilePath.FilePath . "\_Default_" . profileType . "New.ini")
customProfileFile := new File(RLProfilePath.FilePath . "\" . profile . ".ini")
If !currentProfileFile.Exist() {
RLLog.Warning("Module - You have custom " . profileType . " profiles enabled, but could not locate " . currentProfileFile.FileFullPath . ". This file stores all your current controls in Dolphin. Please setup your controls in Dolphin first.")
Return
}
If !defaultProfileFile.Exist() {
RLLog.Warning("Module - Creating initial Default " . profileType . " profile by copying " . profileType . ".ini to " . defaultProfileFile.FileFullPath)
RLProfilePath.CreateDir()
currentProfileFile.Copy(defaultProfileFile.FileFullPath) ; create the initial default profile on first launch
}
If (profile != "Default" && !customProfileFile.Exist())
RLLog.Warning("Module - " . romName . " is set to load a custom " . profileType . " profile`, but it could not be found: " . customProfileFile.FileFullPath)
currentProfileFile.Read() ; read current profile into memory
customProfileFile.Read() ; read custom profile into memory
If (currentProfileFile.Text != customProfileFile.Text) { ; if both profiles do not match exactly
RLLog.Info("Module - Current " . profileType . " profile does not match the one this game should use.")
If (profile != "Default") { ; if user set to use a custom profile
RLLog.Info("Module - Copying this defined " . profileType . " profile to replace the current one: " . customProfileFile.FileFullPath)
customProfileFile.Copy(currentProfileFile.FileFullPath,1)
} Else { ; load default profile
RLLog.Info("Module - Copying the default " . profileType . " profile to replace the current one: " . defaultProfileFile.FileFullPath)
defaultProfileFile.Copy(currentProfileFile.FileFullPath,1)
}
} Else
RLLog.Info("Module - Current " . profileType . " profile is already the correct one for this game, not touching it.")
}
ConnectWiimote(key) {
Global Timeout,emuPrimaryWindow,emuGameWindow,emuWiimoteWindow
If !emuWiimoteWindow.Exist()
{
MiscUtils.DetectHiddenWindows("OFF") ; this needs to be off otherwise WinMenuSelectItem doesn't work for some odd reason
emuPrimaryWindow.Activate()
emuPrimaryWindow.MenuSelectItem("Options","Controller Settings")
emuWiimoteWindow.Wait()
emuWiimoteWindow.WaitActive()
}
;emuWiimoteWindow.Activate() ; test if window needs to be active
If !emuWiimoteWindow.GetControl(key)
emuWiimoteWindow.CreateControl(key)
emuWiimoteWindow.GetControl(key).Click()
emuWiimoteWindow.GetControl("OK").Click()
emuGameWindow.Activate()
}
PairWiimote:
ConnectWiimote("Pair Up")
Return
RefreshWiimote:
ConnectWiimote("Refresh")
Return
HaltEmu:
If RefreshKey
XHotKeywrapper(RefreshKey,"RefreshWiimote","OFF")
Return
MultiGame:
; MultiGame doesn't work with Dolphin currently because Dolphin hides itself from Winspector Spy and cannot send any commands to the emulator through scripts.
If (fullscreen = "True")
{ KeyUtils.SetKeyDelay(50)
KeyUtils.Send("{Alt Down}{Enter Down}{Enter Up}{Alt Up}") ; go windowed to get the menubar
}
If bezelEnabled
emuGameWindow.ToggleMenu() ; put the menubar back
; emuPrimaryWindow.MenuSelectItem("File","Change Disc...")
emuPrimaryWindow.MessageUtils.PostMessage("0x111", "00288") ; Change Disc
OpenROM(emuOpenROMWindow.WinTitle.GetWindowTitle(), selectedRom)
emuPrimaryWindow.WaitActive()
If bezelEnabled
emuGameWindow.ToggleMenu() ; remove the menubar again
If (fullscreen = "True")
KeyUtils.Send("{Alt Down}{Enter Down}{Enter Up}{Alt Up}") ; restore fullscreen
Return
RestoreEmu:
If RefreshKey
XHotKeywrapper(RefreshKey,"RefreshWiimote","ON")
Return
CloseProcess:
breakLoops := 1
FadeOutStart()
If (enableVBALink = "true") {
Loop % SelectedNumberofPlayers
{ currentScreen := A_Index + 1
;VBA%currentScreen%Window.Activate()
VBA%currentScreen%Window.Close()
TimerUtils.Sleep(100,0)
}
dolphinINIBackup.Move(dolphinINI.FileFullPath)
vbaINIBackup.Move(vbaINI,1)
}
If networkSession {
If emuNetPlaySetupWindow.Exist()
emuNetPlaySetupWindow.Close()
If emuNetPlayWindow.Exist()
emuNetPlayWindow.Close()
If !emuGameWindow.Exist() ; if game never launched, close the main emu window
emuPrimaryWindow.Close()
}
If emuGameWindow.Exist()
emuGameWindow.Close() ; this needs to close the window the game is running in otherwise dolphin crashes on exit
Return
; Unused messages for reference from Dolphin v4.0 build 6980 x64:
; emuPrimaryWindow.PostMessage("0x111", "0261") ; Toggle Fullscreen
; emuPrimaryWindow.PostMessage("0x111", "0258") ; Toggle Play/Pause
; emuPrimaryWindow.PostMessage("0x111", "0259") ; Stop
; emuPrimaryWindow.PostMessage("0x111", "0260") ; Reset
; emuPrimaryWindow.PostMessage("0x111", "00539") ; Show Toolbar
; emuPrimaryWindow.PostMessage("0x111", "00540") ; Show Statusbar
; emuPrimaryWindow.PostMessage("0x111", "05123") ; Refresh List
; emuPrimaryWindow.PostMessage("0x111", "0305") ; Change Disc
; emuPrimaryWindow.PostMessage("0x111", "00218") ; Load State Slot 1
; emuPrimaryWindow.PostMessage("0x111", "00227") ; Load State Slot 10
; emuPrimaryWindow.PostMessage("0x111", "00208") ; Save State Slot 1
; emuPrimaryWindow.PostMessage("0x111", "00217") ; Save State Slot 10
; emuPrimaryWindow.PostMessage("0x111", "00303") ; Start Netplay
; emuPrimaryWindow.PostMessage("0x111", "05000") ; Open
; Unused messages for reference from Dolphin v4.0.2 x86:
; emuPrimaryWindow.PostMessage("0x111", "00248") ; Toggle Fullscreen
; emuPrimaryWindow.PostMessage("0x111", "00245") ; Toggle Play/Pause
; emuPrimaryWindow.PostMessage("0x111", "00246") ; Stop
; emuPrimaryWindow.PostMessage("0x111", "00247") ; Reset
; emuPrimaryWindow.PostMessage("0x111", "00501") ; Show Toolbar
; emuPrimaryWindow.PostMessage("0x111", "00502") ; Show Statusbar
; emuPrimaryWindow.PostMessage("0x111", "00217") ; Load State Slot 1
; emuPrimaryWindow.PostMessage("0x111", "00226") ; Load State Slot 10
; emuPrimaryWindow.PostMessage("0x111", "00207") ; Save State Slot 1
; emuPrimaryWindow.PostMessage("0x111", "00216") ; Save State Slot 10
; emuPrimaryWindow.PostMessage("0x111", "00286") ; Start Netplay
; emuPrimaryWindow.PostMessage("0x111", "05000") ; Open
; emuPrimaryWindow.PostMessage("0x111", "05006") ; Exit
17:53:23:417 | RL | INFO | +32 | BuildScript - Loaded Multi-Player scripts
17:53:23:419 | RL | INFO | +0 | BuildScript - Loaded Statistics.ahk script
17:53:23:419 | RL | WARNING | +0 | BuildScript - "C:\RocketLauncher\Lib\User Functions.ahk" not found
17:53:23:419 | RL | INFO | +0 | BuildScript - Finished injecting functions into module
17:53:23:421 | RL | INFO | +0 | Main - Module is built
17:53:23:421 | RL | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\AutoHotkey.dll exists
17:53:23:423 | RL | INFO | +0 | Main - Running module
17:53:23:640 | MD | INFO | +N/A | Module initialized
17:53:23:643 | MD | INFO | +0 | StartModule - Started
17:53:23:643 | MD | INFO | +0 | StartModule - MEmu: Dolphin
MEmuV: v4.0 r6928
MURL: https://dolphin-emu.org/
MAuthor: djvj & bleasby
MVersion: 2.1.9
MCRC: 48F41AEA
iCRC: F063B9AF
MID:
MSystem: "Nintendo Gamecube","Nintendo Wii","Nintendo WiiWare"
17:53:23:643 | MD | INFO | +0 | StartModule - You have a supported System Name for this module: "Nintendo GameCube"
17:53:23:643 | MD | INFO | +0 | PluginInit - Started
17:53:23:643 | MD | INFO | +0 | CheckFile - Checking if C:\RocketLauncher\RocketLauncherUI\Databases\Nintendo GameCube\Nintendo GameCube.xml exists
17:53:23:693 | MD | INFO | +63 | PluginInit - Ended
17:53:23:697 | MD | INFO | +0 | StartModule - Ended
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - Fullscreen: true (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - UseCustomWiimoteProfiles: false (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - UseCustomGCPadProfiles: false (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - HideMouse: true (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - RefreshKey: (NO VALUE)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - Timeout: 5 (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - Render_To_Main: false (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - Enable_Network_Play: false (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - enableVBALink: false (DEFAULT)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - VBAExePath: (NO VALUE)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - VBABiosPath: (NO VALUE)
17:53:23:697 | MD | INFO | +0 | RIniFile.Read - Module - VBADelay: 500 (DEFAULT)
17:53:23:698 | MD | INFO | +0 | Module - Dolphin's base settings folder is not portable and found in: C:\Users\odonnellj\Documents\Dolphin Emulator
17:53:23:704 | MD | INFO | +0 | Process.Run - Running: C:\Emulators\Dolphin\Dolphin.exe /b /e "G:\Games\Nintendo Gamecube\Super Smash Bros. Melee (USA) (En,Ja) (v1.00).iso"
17:53:23:782 | MD | INFO | +78 | Window.Wait - Waiting for window "FPS ahk_class wxWindowNR"
17:53:33:897 | MD | INFO | +10125 | Window.WaitActive - Waiting for "FPS ahk_class wxWindowNR"
17:53:34:145 | MD | INFO | +250 | Process.Process - "WaitClose" "Dolphin.exe"
18:12:11:290 | MD | ERROR | +1117141 | 2
18:12:11:290 | MD | INFO | +0 | CloseProcess - Started, user requested to end launched application
18:12:12:521 | MD | INFO | +1234 | CloseProcess - Ended
18:12:13:071 | MD | INFO | +547 | ExitModule - Started
18:12:13:071 | MD | INFO | +0 | Starting Updating Statistics:
18:12:13:322 | MD | INFO | +250 | Game section statistics updated.
18:12:13:325 | MD | INFO | +0 | ExitModule - Ended
End of Module Logs
18:12:13:419 | RL | INFO | +1130000 | Main - Module ended, exiting RocketLauncher normally
18:12:13:419 | RL | INFO | +0 | ExitScript - Started
18:12:13:455 | RL | INFO | +31 | SystemCursor - Restoring mouse cursor
18:12:13:490 | RL | INFO | +47 | ExitScript - Restored cursor
John