Hi. I want to share here how i setup things.
I'm not a pro with emulator and stuff, so i could do some things badly, but i think that along the way i found some new and interesting ideas about how to improve your user experience.
So i want to make this post, first to share, but also to track what i did.
There is probably a lot of useless stuff here, but along the way, you can probably find some idea that's worth it.
Brace yourself with a big post full of weird stuff, because i'm a master of overthinking and complicating stuff.
1- My setup.
It's important, because some of my choices when configuring emulators are related to the devices i own.
Let's start with something weird.
My Pc is a big wood box stored over my fridge.
I have 10m optic fiber hdmi & usb cable that goes in my office room, and to my tv in the living room.
The reason for that setup is that i have a really tiny office (actually, it was made from two closed where i tear down the wall between them) with no window, so i don't want the noise and the heat of my PC here.
On my living room :
I modified a coffee table to make it lift top, so it's more comfortable to use keyboard and stuff from my couch.
I use DS4 as my main first and second controller.
I also have a wireless N64 switch controller connected to a 8bit do usb adapter
I have one siden gun, i consider buying a second (but that also mean i have to pass a second usb optic cable all around, and it's kinda costly)
And to fill extra player, i have some wireless X360 controller, also got some wired in my office.
I have a 360 arcade stick.
And some sort of shitty wheel (that i got for something like 20€)
And i also have some wii remote and an original wii bluetooth module pluged to my usb port with a diy dongle.
2- Apps and Plugin used.
DS4Window
Turn my DS4 controller into Xinput devices.
I use a custom build, that's not up to date, where i added some minor features. https://github.com/Ryochan7/DS4Windows
I didn't even post a compiled release, it's mostly for my own usage, but if some people here needs it, i will build it.
I added an IPC command to assign all profile at once, I use Ipc command with DS4WindowsCmd ( https://github.com/mika-n/DS4WindowsCmd ) to send them.
So i can do stuff like .\DS4WindowsCmd.exe -command LoadProfile.all.Default
Also, for aside from Default profile, i have profile Default-1, Default-2, Default-3, Default-4. And i made it so that when starting with the default profile it assign to Default-1,2,3,4 according to the xinput slot (so i can get the light color that match the controller slot)
And i also have profile called nolag and when i use an ipc command to switch to a profile that contain nolag in the name, it also reboot (stop and start) DS4Windows. The reason is my nolag profile have the checkbox "Enable Output Data to DS4" Disabled, so the input lag go down from 5ms to 1ms. But it stay at 5ms if you don't restart.
I also have a program DS4StartCustom.exe that just take a profile name as argument and assign the profile. If no argument, it use Default. (that translate to default-1/2/3/4 in my case), and if DS4Windows is not running, crashed or whatever, it restart it.
DS4StartCustom.exe Again, custom stuff, i just share it in case of. You need to have both DS4Windows.exe and DS4StartCustom.exe inside C:\Program Files\DS4WinCustom
Since it needs to be run as admin, i have shreduled tasks that run them, so i could change my profile from an ahk script without admins rights.
Like this : Run, schtasks /run /i /tn "nolag",,Hide
I usually launch it with launchbox on start with default profile, and depending on the emulator i use default or nolag profile (i use nolag when i don't need vibration since they don't work if output data are disabled)
One more thing, i don't use the last version of ViGEmBus, i use the 1.17.333.0 because the last one don't report the xinput slot.
BigBoxProfile
https://github.com/nixxou/BigBoxProfile
So, that's a big one, and most of my emulator configuration revolve around it. I will not deep dive here, just give a quick summary.
The most important feature of this tool is to act as a middle man between Launchbox and your emulator. So, let's say you send emulator.exe romfile. Instead of launching emulator.exe, it will use bbProfile and do some stuff. (could be add arguments to command lines according to rules, editing a config file, execute an ahk script ...)
It's made with Launchbox in mind and also offer feature related to launchbox/bigbox (like to make bigbox run on a chosen monitor, for exemple, if i launch BigBox.exe but i add as argument –profile=tv it will activate my tv monitor, make it the main screen and launch bigbox on it) but it doesn't require it to run. It's an independent third party tool. (so no risk of plugin depreciation)
Siden Driver Custom Build
A version of the siden software i modified so it accept extra parameters, like profile. That way i can use per game or per emulator profile.
You can send command lines :
.\Lightgun.exe -action "start"
.\Lightgun.exe -action "stop"
.\Lightgun.exe -action "mouse-pause"
.\Lightgun.exe -action "mouse-resume"
.\Lightgun.exe -action "load-config test.Config"
.\Lightgun.exe -action "restore-config"
When you launch them, it will not popup a new Lightgun app, but send commands to the existing one.
There is an AHK textbox that is part of the config. It's preconfigured to bind to the Lightgun joystick, so you can use function like GUNA_BTN1(value){} to do something when the joystick button 1 of gun A is pressed. (GUNB_BTN16 function will trigger on Gun B, buton 16)
Basically, with some tweaking, you should be able to start and have your game ready with a command like .\Lightgun.exe -action "load-config yourgamename.Config"
SindenLightgunWindowsSoftwareV2.05beta_moddedByNixx-0.3 (1).zip
BezelMaster
Plugin that improve launchbox rom matching to bezel on retroarch using the Bezel project.
It also other third party emulator to use Bezel using reshade.
DisableUACPlugin
Some time, i have games that needs admins right, or could be emulator. For example, when using Demulshooter for my lightgun, i need to run it as admin.
With this plugin, when you launch from launchbox an non-emulator exe file or if you execute an emulator with NOUAC in the name, it will first disable UAC for 10 sec.
BypassFileExistCheck
Niche usecase, I have some roms register in launchbox where the files actually don't exist on my drive. And BigBox Profile does the job of getting them for me. Like games stored on cloud storage.
But by default, Launchbox prevent of running a game if the file did not exist, this plugin correct that.
BigBoxProfileCompanion
https://github.com/nixxou/BigBoxProfile/releases/tag/V2.0
It's used for the pause menu of BigBox Profile to get metadata info about the game and path of the art image like the background image or the clear logo, to be able to display it on the pause menu. Not requiered to make the pause menu work, it's optional.
4- The Pause Menu
Before going into the details on my emulator setup that revolve around BigBox Profile, i have to make a part about the PauseMenu feature of BigBoxProfile
Why the pause menu ? I'm really not satisfied with the Pause Menu of launchbox, sometime, it appear behind my emulator, or multiple copy of it appear. It do not allow to choose the savestate i want to load/save, it can't be customized to add extra menu and on top of it i want to be able to adjust the audio volume of the emulator from the pause menu from my couch, controller in hand.
This video is outdated but it could give you an idea (there is a lot of time when i had to make the game switch full screen off before the pause, and i reduced the number of case where i need that)
I try to make a pause menu for each of my emulator. But it's not something pre-made, it's basically just an HTML viewer that give the html page the ability to execute AHK script. So there is a default hml page that give roughly the same feature as Launchbox pause menu, but if you need more custom one, you need to deep dive into it and code them yourself.
Still, i will share what i have done for each emulator and explain what modification i did. I usually just copy my default.html and add extra feature on top of it, but do not expect to have something totally working without getting your hand dirty.
A tutorial will be too long here, so i made a wiki post.
I'm presenting the basics, with a simple pause menu with 3 buttons. : https://github.com/nixxou/BigBoxProfile/wiki/PauseMenu-:-Step-1,-a-simple-hello-world
The default pause menu : https://github.com/nixxou/BigBoxProfile/wiki/PauseMenu-:-Set-2,-the-default-pause-menu
The Configuration : https://github.com/nixxou/BigBoxProfile/wiki/PauseMenu-:-Step-3,-the-BigBoxProfile-module
3- Emulator Setup.
So, that's the big part, but i don't have the time right now, i will probably take a moment to cover them one by one, and i don't even have finished on my side so it's a work in progress.
Sega Model 2.
It's the last one i did, and not too complicated so i would like to start with this one.
I want to use differents configs depending on the devices plugged on usb (or wireless). Like my keys on gamepad are not totally the same than my wheel.
I also want a dedicated config if i use my siden gun for the lightgun games and use demulshooter.
For the pause Menu, i don't need much, load/save savestate seems to crash on my PC, i just need to be able to :
- Adjust the volume
- Reset/Exit the game
- Toogle Reshade On/Off
- Have an option to go to the system menu and when i do so, reconfigure my controller to bind L1,R1 to Test/Service and Triangle to restore my previous config, that way, i can go into service and edit them on my gamepad without having to bind keys for normal use.
When i use my gamepad, i want to use this awesome preconfigured pack :
But if i use my arcade stick or my wheel (if they are connected/plugged on usb) i would like to use a different key config. For those two, i will still use the gamepad config as base since both are xinput, but i should be able to modify them.
Full configuration details : https://github.com/nixxou/BigBoxProfile/wiki/Exemple1-:-Sega-Model-2
To continue ... Probably with Retroarch.