whazzzzzup17 Posted December 24, 2019 Share Posted December 24, 2019 Anyone experienced with AutoHotkey and can load (4) separate instances of an emulator so I can play (4) players on the same game? For example: Game Boy - Color Pokemon. It would be nice to run (4) separate emulators and play with (4) controllers. This works, but I can only do it manually by moving each window. Quote Link to comment Share on other sites More sharing options...
jayjay Posted December 24, 2019 Share Posted December 24, 2019 Dude this would make a sweet game menu item plugin, launch multiple versions of an emulator so more than 1 person can play a game at a time. Iv just found out by googling after iv read your post that ppsspp can play multiplayer adhoc games on the same pc. Could create a game menu plugin that launches 2 instances of ppsspp, if there is only 1 screen, split the screen. If 2 screens, 1 screen each instance of ppsspp. Controllers can be mapped per instance. Basically lan on the same pc. Would be a cool addition. I only came here to comment on how cool this would be, Im working on other stuff and dont have the time to pursue something like this. So yeah this is just a shit post, sorry about that. ha. Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 24, 2019 Author Share Posted December 24, 2019 2 hours ago, jayjay said: Dude this would make a sweet game menu item plugin, launch multiple versions of an emulator so more than 1 person can play a game at a time. Iv just found out by googling after iv read your post that ppsspp can play multiplayer adhoc games on the same pc. Could create a game menu plugin that launches 2 instances of ppsspp, if there is only 1 screen, split the screen. If 2 screens, 1 screen each instance of ppsspp. Controllers can be mapped per instance. Basically lan on the same pc. Would be a cool addition. I only came here to comment on how cool this would be, Im working on other stuff and dont have the time to pursue something like this. So yeah this is just a shit post, sorry about that. ha. Exactly. I do the same thing with Pokemon on VisualBoyAdvance for my big screen TV. I just run the emulator 2-4 times and run the same ROM, or even other games. It's just a lot of manual work setting the windows to the right location. I have an AutoHotkey script that hides the taskbar and titlebar of each window, but it would be nice to auto align each window, whether its 2,4,6 or w/e. My kids can then play Pokemon at the same time but on their own version with their own controllers. Quote Link to comment Share on other sites More sharing options...
jayjay Posted December 25, 2019 Share Posted December 25, 2019 (edited) This is as far as I got, I cant spend any more time on this. Compile the script and set it up as an emulator in LB, name it 4 player retroarch or something, you'll still need to add the code to hide taskbar. SetTitleMatchMode, 2 run, path to emulator %1% run, path to emulator %1% run, path to emulator %1% run, path to emulator %1% sleep, 3000 ;wait for all windows to open, longer sleep? winCount = 0 height := (A_ScreenHeight/2) width := (A_ScreenWidth/2) WinGet, OutputVar, List , RetroArch ;replace retroarch with a word in the title window Loop %OutputVar% { Id:=OutputVar%A_Index% WinGetTitle, title, % "ahk_id " Id If (winCount == 3) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, %height% , %width%, %height% winCount++ } If (winCount == 2) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, 0 , %width%, %height% winCount++ } If (winCount == 1) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, %height% , %width%, %height% winCount++ } If (winCount == 0) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, 0 , %width%, %height% winCount++ } } If you wanted to get creative, you could have a screen pop up saying something like "each player press start" with a count down timer. Then split the screen depending on how many people press start. Would be cool. Edited December 25, 2019 by jayjay Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 25, 2019 Author Share Posted December 25, 2019 1 hour ago, jayjay said: This is as far as I got, I cant spend any more time on this. Compile the script and set it up as an emulator in LB, name it 4 player retroarch or something, you'll still need to add the code to hide taskbar. If you wanted to get creative, you could have a screen pop up saying something like "each player press start" with a count down timer. Then split the screen depending on how many people press start. Would be cool. Thanks for the help! I'm posting more in case someone jumps in or you have more time. I did find an error; if you modify the run commands to (2) instead of (4) emulators, it doesn't split the screen. Instead of 1 on the left and 1 on the right, they're both on the left. As for some code on my side to hide the taskbar, this may help. CapsLock & t:: HideShowTaskbar(hide := !hide) ; Toggle taskbar show/hide HideShowTaskbar(action) { static ABM_SETSTATE := 0xA, ABS_AUTOHIDE := 0x1, ABS_ALWAYSONTOP := 0x2 VarSetCapacity(APPBARDATA, size := 2*A_PtrSize + 2*4 + 16 + A_PtrSize, 0) NumPut(size, APPBARDATA), NumPut(WinExist("ahk_class Shell_TrayWnd"), APPBARDATA, A_PtrSize) NumPut(action ? ABS_AUTOHIDE : ABS_ALWAYSONTOP, APPBARDATA, size - A_PtrSize) DllCall("Shell32\SHAppBarMessage", UInt, ABM_SETSTATE, Ptr, &APPBARDATA) } toggle :=0 return Quote Link to comment Share on other sites More sharing options...
jayjay Posted December 25, 2019 Share Posted December 25, 2019 Yeah I only coded it with 4 players in mind, would need a way to tell how many players are playing or how many windows are open and adjust accordingly. If I ever finish my current plugin this is something i'll prob pursue if no one else does. I have a few ideas. Like being able to select and launch multiple games in BB or realigning the windows when a player drops out. Dont know how well it would work though. AHK and window commands can be a pain. 1 Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 25, 2019 Author Share Posted December 25, 2019 2 minutes ago, jayjay said: Yeah I only coded it with 4 players in mind, would need a way to tell how many players are playing or how many windows are open and adjust accordingly. If I ever finish my current plugin this is something i'll prob pursue if no one else does. I have a few ideas. Like being able to select and launch multiple games in BB or realigning the windows when a player drops out. Dont know how well it would work though. AHK and window commands can be a pain. I'm working on it now, but I'm not as experienced so I doubt I'll get far. The (4) is fine, but I it would be nice to have (2) if needed. Or even better, it would be nice to have the user selected how man from 2-6? I also don't know how to incorporate the selection of ROM's. Hopefully the ROM location wont have to be put directly into the AutoHotkey file. We can already drag and drop within the emulator. SetTitleMatchMode, 2 run, E:\arcade\emulation\VBA\VisualBoyAdvance.exe %1% run, E:\arcade\emulation\VBA\VisualBoyAdvance.exe %1% run, E:\arcade\emulation\VBA\VisualBoyAdvance.exe %1% run, E:\arcade\emulation\VBA\VisualBoyAdvance.exe %1% sleep, 1000 ;wait for all windows to open, longer sleep? winCount = 0 height := (A_ScreenHeight/2) width := (A_ScreenWidth/2) WinGet, OutputVar, List , VisualBoyAdvance ;replace retroarch with a word in the title window Loop %OutputVar% { Id:=OutputVar%A_Index% WinGetTitle, title, % "ahk_id " Id If (winCount == 3) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, %height% , %width%, %height% winCount++ } If (winCount == 2) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, 0 , %width%, %height% winCount++ } If (winCount == 1) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, %height% , %width%, %height% winCount++ } If (winCount == 0) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, 0 , %width%, %height% winCount++ } } ^t:: HideShowTaskbar(hide := !hide) ; Toggle taskbar show/hide HideShowTaskbar(action) { static ABM_SETSTATE := 0xA, ABS_AUTOHIDE := 0x1, ABS_ALWAYSONTOP := 0x2 VarSetCapacity(APPBARDATA, size := 2*A_PtrSize + 2*4 + 16 + A_PtrSize, 0) NumPut(size, APPBARDATA), NumPut(WinExist("ahk_class Shell_TrayWnd"), APPBARDATA, A_PtrSize) NumPut(action ? ABS_AUTOHIDE : ABS_ALWAYSONTOP, APPBARDATA, size - A_PtrSize) DllCall("Shell32\SHAppBarMessage", UInt, ABM_SETSTATE, Ptr, &APPBARDATA) } toggle :=0 return Quote Link to comment Share on other sites More sharing options...
jayjay Posted December 25, 2019 Share Posted December 25, 2019 I'll explain like im talking to someone who doesnt know what they are doing, I mean no offence. Im just a bit crap at explaining things. You need ahk installed to your pc. Copy this into a txt file: SetTitleMatchMode, 2 run, %A_ScriptDir%\VisualBoy.exe %1% ;change visualboy.exe to whatever the exe is run, %A_ScriptDir%\VisualBoy.exe %1% run, %A_ScriptDir%\VisualBoy.exe %1% run, %A_ScriptDir%\VisualBoy.exe %1% sleep, 3000 ;wait for all windows to open, longer sleep? winCount = 0 height := (A_ScreenHeight/2) width := (A_ScreenWidth/2) WinGet, OutputVar, List , RetroArch ;Visual Boy Or Whatever Loop %OutputVar% { Id:=OutputVar%A_Index% WinGetTitle, title, % "ahk_id " Id If (winCount == 3) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, %height% , %width%, %height% winCount++ } If (winCount == 2) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, 0 , %width%, %height% winCount++ } If (winCount == 1) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, %height% , %width%, %height% winCount++ } If (winCount == 0) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, 0 , %width%, %height% winCount++ } } Save it and rename the file to VB.ahk or whatever, just make sure to change extension to ahk. Move the file to the same directory as visualboy.exe With ahk installed you can right click on VB.ahk and compile to create VB.exe In LB set up a new emulator, set it up as if it was visual boy but give it a name that explains what it is. and point the application path to the new VB.exe. Right click on a game, launch with, your new VB.exe emulator. You might have to disable the start up screen for the new emulator. Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 25, 2019 Author Share Posted December 25, 2019 (edited) 21 minutes ago, jayjay said: I'll explain like im talking to someone who doesnt know what they are doing, I mean no offence. Im just a bit crap at explaining things. You need ahk installed to your pc. I got all this man. I'm providing feedback on what you submitted and what I added The one you just submitted, has a small typo. RetroArch should be changed to "Visualboy" or w/e Here's what I have below, I am trying to adjust for if the user wants (2) emulators. I can get it to work manually. See below. The problem, is the WinCount, I think I need to create another WinCount and (2) IF statements seperatly if wincount is 1 or 2. Also, on yours, if WinCount ==1 should be switched with If WinCount ==2 to work with (2) emulators where they open side by side, instead of top and bottom, in case the user doesn't want (4). The issue I'm stuck at is, your If statements are adding "winCount" and I don't know how to stop if only (2) emulators. I modified the screen height for == 0 and == 1 to make them work side by side on opening (2) emulators. I need to create a separate if, when the user wants (1) or (2) emulators instead of (3) or (4). And when they want (3) or (4) emulators, it needs to ignore the (2) IF's I just modified and use another version where the screen height isnt adjusted. I also added a toggle to remove the taskbar. Not sure how to auto enable taskbar hide, but you can press CTRL + T manually SetTitleMatchMode, 2 run, %A_ScriptDir%\VisualBoyAdvance.exe %1% ;change visualboy.exe to whatever the exe is run, %A_ScriptDir%\VisualBoyAdvance.exe %1% ;run, %A_ScriptDir%\VisualBoyAdvance.exe %1% ;run, %A_ScriptDir%\VisualBoyAdvance.exe %1% sleep, 1000 ;wait for all windows to open, longer sleep? winCount = 0 height := (A_ScreenHeight/2) width := (A_ScreenWidth/2) WinGet, OutputVar, List , VisualBoyAdvance ;Visual Boy Or Whatever Loop %OutputVar% { Id:=OutputVar%A_Index% WinGetTitle, title, % "ahk_id " Id If (winCount == 3) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, %height% , %width%, %height% winCount++ } If (winCount == 2) { WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, %height% , %width%, %height% winCount++ } If (winCount == 1) { height := (A_ScreenHeight) WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , %width%, 0 , %width%, %height% winCount++ } If (winCount == 0) { height := (A_ScreenHeight) WinActivate, % "ahk_id " Id WinSet, Style, -0xC00000, %title% WinSet, Style, -0x40000, %title% WinMove, % "ahk_id " Id, , 0, 0 , %width%, %height% winCount++ } } ^t:: HideShowTaskbar(hide := !hide) ; Toggle taskbar show/hide HideShowTaskbar(action) { static ABM_SETSTATE := 0xA, ABS_AUTOHIDE := 0x1, ABS_ALWAYSONTOP := 0x2 VarSetCapacity(APPBARDATA, size := 2*A_PtrSize + 2*4 + 16 + A_PtrSize, 0) NumPut(size, APPBARDATA), NumPut(WinExist("ahk_class Shell_TrayWnd"), APPBARDATA, A_PtrSize) NumPut(action ? ABS_AUTOHIDE : ABS_ALWAYSONTOP, APPBARDATA, size - A_PtrSize) DllCall("Shell32\SHAppBarMessage", UInt, ABM_SETSTATE, Ptr, &APPBARDATA) } toggle :=0 return Edited December 25, 2019 by whazzzzzup17 Quote Link to comment Share on other sites More sharing options...
jayjay Posted December 25, 2019 Share Posted December 25, 2019 You need a way to know how many emulator instances are wanted before you hit the run emulator commands. this WinGet, OutputVar, List , VisualBoyAdvance Gets the amount of visualboy windows that are open. this: Loop %OutputVar% loops through the windows. the winCount variable is just to separate each window to apply the coordinates. at the moment it doesnt have any effect on the amount of windows the user wants. If you just want 2 players then you can delete 2 run commands and 2 of the if statements in the loop and set up a new emulator in LB. Or you could start the script off with a gui and have the players press buttons to register the amount of emulator instances wanted. This is to much work for me to go over. Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 25, 2019 Author Share Posted December 25, 2019 Just now, jayjay said: If you just want 2 players then you can delete 2 run commands and 2 of the if statements in the loop and set up a new emulator in LB. Or you could start the script off with a gui and have the players press buttons to register the amount of emulator instances wanted. This is to much work for me to go over. Yes, got that. But for the first (2) instances I changed the window height so they're side by side when playing (2) emulators - see the top how I commented our instances 3 and 4. With that said, if I do enable all (4) emulators from above, how do I ignore the screen height that I put in for the first (2) window instances. Quote Link to comment Share on other sites More sharing options...
whazzzzzup17 Posted December 25, 2019 Author Share Posted December 25, 2019 I'll play with it more and report back in the next day or so with some more progress. To-Do's Adjust alignment for 2-6 emulators Allow user to select how many instances to run. 2-6 Enable taskbar toggle to auto hide without pressing CTRL+T each time. Bind an button to close all emulators and renable taskbar. Selecting multiple games or selecting the same game multiple times. Re-align windows upon player removal. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.