Jump to content
LaunchBox Community Forums

BigBoxProfile


Recommended Posts

BigBoxProfile

View File

BigBoxProfile is an app that allows you to alter how Launchbox/BigBox and each of the emulators works, adding a profile system and tons of features that allow you to alter/customize how emulators work.

 

What is BigBoxProfile ?

 

This app is made of two parts that work together but can be used independently.

 

1- There is a part that alters how Launchbox/BigBox works and add a new command line parameter “--profile=” that will trigger users' configured settings.
It allow you to bind a specific monitor, sound card for a profile or even use a specifics launchbox profile settings (for example make a bigbox profile that only show some of the platform/playlists)

 

DvnY3O-vpVRLM9lQ1swTiHumTsw88OB23D-w14y6nCZmittpxIFIPYoWQ7C3Iyb2LbUWWv73cG-mS62ZrCxj1B67t01tJBIGoIq-dCJqpDmJmDGe8W3H4j5Q-G3pRgMBQZ00WSWcZ6Jh_o2sMZMuEvA


 

2- The other part allow you to alter how emulators works, change the command line that they receive on the fly and do tons of stuff (change monitor settings, execute ahk code, use fallback path for rom, copy rom from distant path to local drive or ramdisk, extract archive, executes pre/post command lines, including command line as admin, force the game to be run as admin …)

 

gc8K9z5JJxjoEYA-fdwtGa6scpGsa3rUfPOgEd7QGePh5pro_KJoqE5tHVSFSZBerAvHVOS7IYot8fBBJSB12DouQYSsakPuJVRO8F6h9ZQl-AXCo3pRwRVBQ_lbJWyz4jhiveH8iRhFBXp91kd-dhc


 

How does it works ?

 

The app makes extensive use of a hidden feature of windows called the “Image File Execution” injection.

If you edit the registry at “HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\” you can register a key with the name of an executable to target and an app that will replace it.
So, in my case, it create this kind of keys : 

34EGVuL5igyTFk-zb7_bZqR2qAlQm_lPV1lQ6SePrJMNMGC2Q9QqDxXUBEvPCJ1lZS8dewpM5MQvAYhHlxVbydEyeQfYCYO-l7UC3CEgptEX9kwoSpp3Gio96n0zd2UoqnkT-TsWKrVEW4KJWu_jHhI

 

That way, when you launch an executable called BigBox.exe, instead of launching it, it will call BigboxProfile.exe. My app will do actions and call bigbox (or launchbox) itself.
So, it’s like an exe wrapper, but from an user standpoint, it’s invisible.

 

As for emulator, it works the same, once a emulator exe is registered inside BigboxProfile the app will register a registry key to hijack it, do some user configured actions and then launch it.

 

I’ve written modules that you can chain and order the way you want. 

Technically each module have 3 functions, ExecuteBefore, ExecuteAfter and AlterCommandLine

If you chain Module1, Module2, Module3, it will do something like that when you launch the emulator :
Execute ExecuteBefore for module 1, 2, 3.
Pass the command line to module1 and alter it with the AlterCommandLine, then pass it to module2, and then pass it to module3, launch the game with the altered command line.
On game close, execute ExecuteAfter on module 3, 2, 1.

 

There is a slight subtlety when using launchbox auto-generated m3u for multidisc, but i will get to that later.

 

I- Altering BigBox / Launchbox

 

Ok, so first you can create BigBoxProfile Profiles

6k-JJTBUFTYVeR8GEA3VO9F5OzbnLus68RWdodwEmAEslN5gTEs-OmX_PyKuYxWYtVvPGgXCHSFoJzhpnYwiTPw-7754nqByGvV0vjyijHh__TKxiCsgUxwvO3FQtAIRfBCnxorYTJETVlHBLkldqBI

Beware, here i’m talking about profile for BigBoxProfile (my app), it’s not related to Launchbox/BigBox settings (xml files inside the Launchbox/Data folder).
You can actually alter how and witch xml files launchbox will use with a specific BigboxUtils program, but i will get to that point later.

 

So BigBoxUtils is shipped with a “default” profile, you can add as many as you want. For example, you can add a profile called “tv” when you plan to use your BigBox on your TV

 

Once a profile is made, you can call launchbox/bigbox to use this profile when you add –profile=<profilename> to the command line. Like BigBox.exe –profile=tv
 

This use case is actually what made me code this app. I use bigbox on a computer that’s plugged to both my PC monitor in my room, and to my TV on the living room. I play mostly on my PC monitor, but i wanted to also be able to launch BigBox on my tv from a simple shortcut.

 

The basic options for a BigBox Profile are here : 

GI-sJw5nl4hcAWBB1CORpIPsQv4SMt33oc0ksPJg3yVBkiRXRPCZZEy_o68as-xiwVLaWkcQ_64rqzsWQg1-1NfoM403-9eBEoHVhfovCY01niuwbxXgTIe7bpkiRd9N4Sn2aRkfuIvvIXKJYBv6DK4

 

Monitor Priority

Set the monitor on witch BigBox (and eventually Launchbox if click on the checkbox) will launch. 

 

It change the monitor option in BigBoxSettings.xml before Bigbox start. (And for launchbox, it will try to move the window)

 

By default it use as default “main”, and myself, i only use that.
Main means “Main Display”, it’s a primary monitor, the one with that checkbox enabled :
YcMEmhL1OxDRt-h1CTMPsu5Zt4DszRJTQOAs1qbyhbP9NMI7ozTEwqOg4fwRw_HmXrQDhJqMEtxfhtNTICMv_bnKPOBQuLCROJxoLMMh_aFNBXRNszj5QcwS52uivoO7CYenNBdvSi2S6icdRZZlB2E

 

So, with the option set a Main, you are sure that you will not encounter weird Bigbox bug when the monitor change, it will always use the primary one, and if you change the primary Bigbox will launch on it, that’s really handy.

 

But you can also specify an other display if you want.
e3_5vmtWlHIidBrshmtwQwgXBxH91PXQqioJlqrjLrc7Bs04Z6_te9QatRQR59BdptD4iSdoscvtSvsTVF1DP1aPeo8EXxI01ehUQvkHb-RfufG0TbzqYO7uy0EQX8Ir9P7BhMBISBC-TNCy0KTQOIc

TnQ4cdfLrvMwtkNWKVxZo5bVSjE9B0QTYV7N-VCS1s1xpm7EVTiVjq8fkFjKcnSyyPKunwP1NbSZooByTkhwuZ0vttiKUUIfCLywb77Zf2060CMDhP0QcB0TQGhBgp-YKSl-vfS87lgPb5Xxvny2jsQ

I actually wanted to show the real monitor name alongside DISPLAYX, but i ran into technical limitations.

 

Use Monitor Disposition : 

 

fEbzD3JpCyPWy2J7PpBajdfd2VJpIpDD-6L7Zf7LiszkRWBpKSo4Dr6P75_ge3ldL4I5dVMsTBRw7VFNnCUTy0L2KN2AvQxy7wVfT_yogP1fL31sqHDYiNVdyVOFhqO6-PypJJPENBMvgcus3vW9qo0

 

So, here is the game changer, here you can register and set monitor layout. 

It actually use code from this excellent software : https://sourceforge.net/projects/monitorswitcher/

But it’s slightly altered to also manage DPI change/restoration.

 

So, if i go back to my exemple with my TV profile, i will register a monitor layout where my TV is set as main monitor and since my monitor priority is set as main, when i launch bigbox.exe –profile=tv, it set my TV as main display, launch bigbox on it, and once bigbox is close it will restore my usual monitor layout.

 

As a side note, on the last version of the app, in the bottom of the main form, i added a quick combo list : Quick Monitor Disposition Switch. You can use that to manually switch between saved monitor layouts.

Set Primary SoundCard : 

 

UzrosIH6KqnBwm5AadWaXD5ty4DdgkTup48q62RZjocVJtXKzI4dNTN9Zz-kj8gyrihiVnalvaaxiSbviJ4IFRz0P8B5GwElNDdiFB43uI9f5i27d7hlDs4rIK7Qg-QOdIc2nagQex4lxAUSKNWlMUw


It’s straightforward, once set, it will change the main playback device.

Like with my tv profile, i will force the sound to use the TV HDMI.


 

Use Specific Launchbox Data profile : 

 

It’s an hidden and experimental feature, please backup your data LaunchBox\Data before !!!

So, with this features you can use a copy of some or all xml files of the Launchbox/Data folder for a BigBoxProfile.

Restriction : It use hardlinks, so that only works if Launchbox/BigBox is used on a NTFS drive, not gonna work if launchbox is used from a network drive.

Like, let says that for some reason, you want a custom InputBindings.xml for your tv profile.

You create a folder called “Profile_tv” and put a copy of InputBindings.xml inside and that’s it.
Now when you launch bigbox, if you use –profile=tv, it will replace the InputBindings.xml with that one.
Now, to go on a more practical use case, if you create a folder inside Profile_tv called Platforms and you put only a copy of Nintendo 64.xml from your original Platforms folder, if you launch with –profile=tv, you will see that’s now it only show the N64 platform.
Same goes with the Playlists folder.

 

As a side note, if your end goal is to do something like kid profile with a subset of platform and playlist, instead of copy the original files, you should hardlink them (mklink /H linkName target) so in the future, if you change something in the Plateform/Playlist, the change will apply to your kid profile too.

 

 

 

II - Emulator Hijacking

 

So, if you didn’t do it yet, to understand how it works, you should read the explanation at the start of my documents.

So, basically, you can add modules and order them, when you launch the app, it will do the action of all module, one by one, altering the command line if needed and pass it to the next module until it launch the emulator.

 

A simple (and totally useless) exemple :
UvzamEfffrdaZlMQ2Qee_N4UOUepr8E33PsKEafW8zIJmqKvx9rrc0n9pSwavkifWg_fjxhpvM5F29JCmmt6J1TTXQnNyO9ilqZ_IAoZbSoxiSsR7PWZKvRY4QvdgCCp7XiGd48ZZ3tILMZn1feahA0

 

With this configuration, i chain 4 modules, a Prefix, a Replace and two Suffix.
You can play with the Exemple Command IN Textbox to get an idea of how the command line would be impacted.

Once saved, if i use a cmd prompt and execute : 

CalculatorApp.exe "C:\MyRomDir\MyRom.bin"

It will go to the first Prefix module and add a -f before, so the second module Replace will receive as input : 

CalculatorApp.exe -f "C:\MyRomDir\MyRom.bin"

This module will replace .bin with .rom so the next module will receive :
CalculatorApp.exe -f "C:\MyRomDir\MyRom.rom"

It will add -extraarg so the last module receive :
CalculatorApp.exe -f "C:\MyRomDir\MyRom.bin" -extraarg.
And since the filter condition match and the command line contains -extraarg, it will add -otherarg.

 

So, bigboxProfile will execute :
CalculatorApp.exe -f C:\MyRomDir\MyRom.rom -extraarg -otherarg



 

If you want some more real exemple, that whati’m currently using for retroarch and tecknoparrot :
 

yc2_LxqWXR_eAAXgxy-rzKf009ecbdgUeE8mVq0kuwKNMu1kmlqrYRegoaCVpcRV9oC3YIGtFUv9ggrEmc2tYu8E34u_jCrPakb8v7bk_CJ42MPnCOOTU0cgfNFHTtD3fbp-2xVPmq3KXqp53dkrUQI

 

7RuASyGgXcrgffgHazBTWZ1tMR74TJlXAjgj60B_ahYIx2YeMlNLFyBbra9bMmFTlnNtlv5EqgtJ5w5qsrY_AIsUvh88kSH6tQ7OiykFmmQxILSDWHJXSenlX4cuE55mJ6VGdrbkflPwnbRNiut0lak

 

Quick Module list review : 

 

Prefix : Add some argument before the rest of the command line
Suffix : The same, but after the rest of the command line
Replace : Replace something in the command line, support regex
ChangeExe : change the target Exe

FixRetroarchMonitor : Will force Retroarch to use main monitor
FixMameMonitor : Will force Mame to use the main monitor
UseFileContent : Let say you run emulator.exe “D:/ps3/metalgearsolid.txt” and inside this text file you have D:/ps3/metagear/eboot.bin, it will execute emulator.exe “D:/ps3/metagear/eboot.bin”

ChangeRomPath : You can do stuff like, if the file is not on your hard disk anymore, use another path (your NAS for exemple)
CopyFile : You can run something like emulator.exe “\\nas\mygame.bin” and it will copy the file locally before launching. Support Ramdisk and show a progress bar. Great for games stored on cloud like Google Drive.

ChangeDisposition : Use a specific monitor layout

FakeFullScreen : Turn a windowed windows into a fake full screen, removing borders and maximize.

RunAsAdminTask : Execute the emulator.exe as admin.

ExecutePrePostCmdAsAdmin : Execute extra command as admin before and after the emulator launch (like for example, start and stop DS4Windows)

ExecuteAHK : Make your own custom module in AHK

RomExtractor : Show a GUI to choose and extract a game inside an archive that contains multiple versions of the same rom.

 

About Launchbox Auto-Generated M3U : 

There is a special case when BigBoxProfile receive a m3u generated by launchbox (like for Multi-Disc games)

 

In the command that will be received by nearly all modules, the m3u file will be replaced by the first file in the m3u. Module then will not be allowed to alter the file path in the command line (but they can still alter the rest of the command line, just not the file argument.


Why this design choice ? Because often, you will do stuff like filter on specific rom path, so that way, even when you use a launchbox auto-generated m3u, if you have a trigger on let say D:/roms/n64, that will still trigger it.

 

Also, there is two modules that will behave differently, CopyFile and ChangeRomPath.

They will run for each element in the m3u.

 

Modules Deep Dive : 

Prefix

bkOVgdecSlv8vIUkPtqJlNMWDZ1a3J8KFzG42-EO7aEvEIyBMsyQxwCShuX_wKUIIXZ5QRPYjRBecsG1AwOUMXKmA-4_9Ohjg6QnhgeHihXF6dAod3WM_BvfN0cSGn6acl_uGL4rC9pHr_hZonVoT-w

Add some argument before the rest of the command line
You can use a filter to only do that if the cmd line contain something

 

Suffix : The same thing but as Suffix

Replace

u3MW9Gvxer9e6phVeW2vUrnwMfBKCEOattJ2qijgPPhYosHoSV8Zrt8AcMYRtvUGbvc8vUlAU0ko1YfsJBcL1bMNZTshoh0YLJgPiPFcNNAxRXrJ6GbAyDnngfNBS3Llqq8qNoPvhMYnt_BTBGowL38

The thing to not here is that Replace support Regex, the format is similar than those used for Notepad++

 

ChangeExe

zGqpOEtr5oKGCgjXYVxggN3DrAlmO8hDGOK8ea4Tl4cj7s8jqUwmzVudiQFg6IT7EwMZ_gnMJwGVePN1s6mwqClvofGGPZWdQj8Pxc3I6gZ5ggeG1wNNFclUWv25hblounNjP1n0k0_LJyEe1rrxs-k

Nothing to say here, it change the exe, i should add a filter condition when i have some free time

 

UseFileContents

AIHMBtSHXUrXaPur39pnT7WHF7fM9TXygk8uK9R20iYm3_2g32luRzDsFxlQ3mwICC7NQyvlLvkMUaLbblOBvr7bvwOkcIjOjol_Bx3el0YPaAFC_iH63El6SjF83mFJwbn2UgOtPuQUoAO6n560eFs

Let say you run emulator.exe “D:/ps3/metalgearsolid.txt” and inside this text file you have D:/ps3/metagear/eboot.bin, it will execute emulator.exe “D:/ps3/metagear/eboot.bin”

You can use relative path inside the file too, and use one of the two option in the radiobox

 

ChangeRomPath 

 

Lfd2taMl1WDhUy-v9azTJi-RyzQWZYpbRecYXPvhU9wGP9EnzASqfylbxNJfESd8qmgbxRzJ6cTxPLQY02yPJfx0or8Ea8N3sX9gamQMKkkDY-KTQqOIx6LuNOCisUS-k9ekxiJko5_PsPU5lOUvpdA

Ok, so this one is a little more tricky. It will trigger when you launch a file as argument to your emulator that match path to replace.

 

You have two side : Hight Priority Path and Low Priority Path.
 

Hight Priority path is when you have an extra copy of your file on a quicker drive. Like you launch emulator.exe D:/rom/plateform/mygame.bin , D:/ is a slow hdd mecanical drive.
If you have set C:/rom/ as Hight priority path and C:/rom/plateform/mygame.bin exist, it will use this one instead and your final command line will be 

emulator.exe C:/rom/plateform/mygame.bin

 

Low Priority Path is triggered when the file passed as argument does not exist

Like if i remove the file D:\rom\mygame.bin and i launch 

emulator.exe D:/rom/plateform/mygame.bin

Since, the file does not exist, it will search in my low priority path if Z:\home\mehdi\coffre\sf_POOL_JEUX\Roms\mygame.bin exist, and if yes, it will launch 

emulator.exe Z:\home\mehdi\coffre\sf_POOL_JEUX\Roms\mygame.bin

 

Side note : By default, launchbox does not allow you to launch games where the file is missing, you get :

6eaYN2ydYYAeQ9QRK6AKiQ6RFA6z03Ay2y1U7OKzmj-jbt3ijc-UdBJ_JDVaBP8VPCquXwiaCTBsUNLJ_yS5WquKcBxVNBoor0IqakA8VnE1m5xAl_hz2xpLd0KXtXacT38BY6L5qNv5LXRNcao7qnc

To solve that issue, you can use this addon here : 

 

https://forums.launchbox-app.com/topic/74181-bypass-rom-path-verification-before-launch/#comment-438354

 

CopyFile : 

You can view a demo here where is use ChangeRomPath to point the file to my cloud drive if the file is missing, and then CopyFile to copy from Gdrive to my local storage before launching the game : 

 

https://www.youtube.com/watch?v=KI64EIPFmxk

 

tGhy1CCk2vYwPCclVEKgzw5l0v75TlwO38D5uRNI0geBPZQ9t8wmdZ0gAoLHCUkNco1wP19lGhi7Mj3z1kGw0AYAuG8zDoFw9mnqoLI_GXdDmDp_sLCU0r-67WAeFds4V7S3_kt6V60lx6V4Wm9sVKs

 

Note : It does support Ramdisk if you don’t want to keep the file and preserve your ssd.

For that you need to install this app : http://www.ltr-data.se/files/imdiskinst.exe

 

ChangeDisposition : 

 

Use a specific monitor layout

VgZrQcdDJry_X2TOKjiqd-npRfoDdMFDhO46uiNbcybjYZfvQj08o6lfglxYPdBLLU9e8FyygUpAT4eLZ_hxcm9Hhvj9GmqHm9c4qZb7w7zljFavuYoIcoJzU72cA1ORYE6CWUcnmo713E8Zgcsuqm8

Note : the button to create new screen disposition do not work, to create disposition, use the option on the main window config.


Btw, here you have an use case i do regularly, when i want to apply a filter for a bunch of games, instead to use a filter with the rom name inside, i use a new argument (here –2k) and then i add this extra argument in launchbox
Lmc6E67lKBSKfnhX4UBUs9OKb3VJBapxurzgMEVJzDwxiM7ZoCPSWk6fpicxVqSUuWbMvVwSku3gSzX7QL2Xrl6ZdQqUfWATi-yeg_59iXC5Fcx98s9y3MPNT_87SjFI4E_Vz1ifU4NtjFhCfJOMKP4

This changeDisposition feature is really handy with tecknoparrot when you have game that can be very picky with monitor framerate and resolution.

 

FakeFullScreen 

 

Turn a windowed windows into a fake full screen, removing borders and maximize.

tno29o7brCWCXnF1K6VytoAi_2xstkcgaYYvSizZn1hKNj3t39BX6myXCXP15tXNjj5vI2Uepa-smRYCv1Z3d_le3hiPivvHpiLtaZrG-4RKS-5cmC8NyUWhLzJOc6ABv0bHioZj6eQV1zhKTrjPVe0

It only support search by executable name, you can use emulator.exe, but you can also set one or search in the command line by regex. (i do that because i have a case of instead using the emulator.exe directly i use an application wrapper that do something like launcher.exe emulator.exe argos. )

Timeout is the time to wait for the application.

 

RunTaskAsAdmin

 

b37cLRieRZW6WnuWnSW7pnpilh3xJ7Mr2clLgQe4EufpJZlM1tFx3t9gyokEzfu2HfyKlsLmVZlQhVUwUDGGQDI68MwLjAIu35paUy4rzHvHcdbqUB03-rgJn2jotMBg-49z5a5Ys7NzUSjOESrc0L4

 

I have a few games on tecknoparrot that actually requiere admins rights to be launch. And since launchbox/bigbox is launched without thoses rights, i have an issue and i don’t want to be bother by UAC prompt.

So, how does it works ? When the condition to launch as admin is fufill, it will register a shreduled task (only asking once with UAC).

In my exemple, instead of triggering by some element in the command line, i check into the file passed in the command line if it contain a specific string.

 

ExecutePrePostCmdAsAdmin 

 

kqzFOXHlSh_OqV52TcAbyxS05m-gZ6o7twMffhMvu_4qqgV069eKpU47u9NDtA-_7424Ym-3kxnLwbk757jpbQNJfrE2S8Ia0oYR_czYm4CSt4uR-H_uqOSVKcFXW4k44G0Aj1smAQrFEJpGiMQEAAI

Execute extra command as admin before and after the emulator launch (like for example, start and stop DS4Windows)

 

ExecuteAHK 

 

OdP1yYy02qaO--b72KbXQLqTxt-7lmj7OH7VqzTK84CzPeZ-0kTMi5Jaa89LxVRYGZ1Y9VtBYB24txu2ZNFl-ixEexzGW1_51tRGDoXhIV0N3cjaHRamodNIA7PX8HPWk8a9VKYzlVU6el1_CykNP2g

 

This one is tricky, it’s for power users. It allow you to make custom module in AHK.

Execute Before is the code that will execute before emulator launch, 

Execute After will execute on emulator close.

And in Modify command line you can alter an array variable called Args

Modify Command Line Exemple only only apply to the exemple command line, so it’s used only for test.

IDS9wHKaPnieJL20CltZkfGQkNBXclk_e-3HgmcrPqh3r5zgm-TrdLNMgk5ab9LudN3ks2XVzNxCyNJHO9rCG520K-alJJWnkU3XBzlhBVYkvW1Nvl-Zlq_ZpgTV-qyzg7Hf_3309_y03LvpiKh-5tk

 

With this module you can create stuff like append specific config if you are remote playing and do a lot of stuff.

https://www.youtube.com/watch?v=NxezepuAkLI

 

RomExtractor 

 

So, i’m using the Hackset with 8bits/16 bits era consoles. Instead of using roms, i have archives filled with alternative versions of the same game.
 

l73EGJ5Q3vnqFVJRLhbnq0j0sLkRIF8i0VF6bliZj07H0nwh39yms5UFKIfVzROeUxIfmJ-c7PVI2Jf7w1CB6f_AISW9sG8ZcVfXBeF8Xs9m2T2rttcs5DrUrs2kGg_vF1Oz_md_0-0XVwuyN14CVk0

 

So, it’s vital for me to have a way to select and launch a game within the archive. As of today, i was using the awesome plugin ArchiveCacheManager ( https://github.com/fraganator/archive-cache-manager ) but i wanted something more suited for my own need, and be able to chain it at the end of my module list.

 

Also, since BigBoxUtils is a third party application and not a plugin, that allow me to use it outside launchbox/bigbox and do not fear that a future update would break the plugin.

 

So, if you used ArchiveCacheManager before, this module is straightforward. Some of the feature of ArchiveCacheManager are missing, it only manage archives (zip, rar, 7z), not iso, chd and don’t have a batch extract feature.

 

On the other side, it have a few features and supports the metadata files packed with the Hackset. (you should put them either in a metadata subfolder on the Bigbox profile install dir or on the parent directory of your rom files)

 

So, the config : 

wGkmz14fIBWJ9_rqhgwadmzG1u2kQKo8vXEQNsg5ylvUpNH7Mj9lWI7788DzkfM-cEB-Q1NhRzUZ5dUqlA4Xt00X1c4l8B7eB-txALRJuzVGrFBudAUaC-Jn4ln_S1LmjGzpCRmn6Rbb9YtDHIMcdmg

 

If you set a max size of the Cache Dir, oldest files inside will be removed if the total size go over the threshold.

 

You can set multiple priority profile

 

c_0SpvZQM66trDanm-OaUc4rhb4iGnnHFCOkBndrYgpC_VKwswnJacVf-8zGbMjM58YRKttgdLjJe9_k9d4Ye5fpIomm507H4CHtkduSdeCmDf-i5OlDlVzS8wKshPlDym8_GD6qf4rRQRvVhewCGS0

SmartExtract is similar than ArchiveCacheManager, if a file contains only files with extensions that match the standalone rom extensions and the metadata extensions, when you select a file to extract, it only extract this one. If SmartExtract is not enabled or the archive contains files with unknow extensions, it will extract the whole archive.

 

 If ImDisk is installed, you can use ramdisk to receive the extracted rom file.

The priority list allow you to automatically select witch file should be extracted by default.

 

On execute, you will see a windows like that : 

The file selected by default will be either the first one that match a priority rule or the last played files. It also feature a short list of games (Your favorites games, up to 5 games that match your priority rules and up to 5 last games played)

It does support gamepad, but only Xinput on controller 1.


 

adh-TnEH05ORjwaLy-Qp4mrGLlqIclUxrOGwrJDwNPK3BKS5hZbAZAA3fbpcvJGGAGN7PnQy-DmC3os5RmGEmRLNRhH6lMCK6q7ae_wa1o5JRh8rDqKjlXaTwgDhiprIDXeYd7HRgBzqiCmuhJ6x8GE

 

If you press F1 and have metadata files, you will see something like that allow you to browse the whole archive and show the metadata files.

 

4BTG2i4Yu7SEJ4sFRgb3Y6BjiIa7zQPVLjJD4_IaRdTjDHKY2zd-guk6iNHd58FI7QdZyoWKt8Ak14zwNCjYEzrOUBWfHCl8X8YNbnW1UgwQnI5bBXRN1-HAEIP4FKNui7EM7pNzxE77eqkaiwxJ4hI

 

If you press F2, you will have a desktop version that go a little deeper.

Gsy3sEzpf2z6i91vDQ_Lq4IH3QhddrM-EmEMVkWOMG6Zw9kwHbCfZBmp09wT8ylAOoD6Us4NiIEZV92NKD9xjVi6JUaPX1RbJY8yGVRnXtiNeWhBLSk00lkCmhXhkTfNMESfdsDRgTIJulk1o2OSy6Q

 

Note : if you use the muppen core or Project64 V3, it will also manage htc/hts texture for N64.

 

Yellow star is the file that is the first to match one of your priority list.

Blue star are other files (up to 5) that match your priority list

Red star are files that you set as favorite

If the file name is written in dark red, it’s because you launched them recently.

 

Right click menu allow some extra stuff : 

qfLA1ALxPyPA-moFg6RLVUkWWBGHBNZAMi5QQUZPovYhCIYVLcAToT-FwH9wFOM-8hF6JNRa0ECaXUqP6jYOOnNiQHIh0kI6WmLi6pGlscZS0zIuIik-Co08BnQrnNqIFzqfYb3Q0GH7N2Bua2jMSko

 

You can filter roms, set favorite, Copy/paste savestate across roms (only for retroarch) and extract them.

 

https://www.youtube.com/watch?v=z3SGPnVr8SU










 


 

Edited by Nixx
  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...

New version up.
 

Important : Fix a bug that made emulator always use custom actions from the default profile, even if LB/BB was launched with an other profile.

When a BB profile need to change the monitor layout prior to launch BB, check every second and wait up to 10 sec to change the soundcard. Because if you activate a monitor, like a TV from a desactivate state and want to use his HDMI for audio, you need to wait a little before being able to switch to his soundcard.

RomExtractor and CopyFile windows should resize according to your screen resolution.

Some UI Fix

After an emulator close, BB Profile force back focus to BB/LB.

Link to comment
Share on other sites

  • 2 months later...

Future update sneak preview :

I'm working on a new module, and it's so complicated that i will have an hard time to explain.
But basically, if you put your mind into it, you can do some nasty shit.

My goal is to be able to play my emulators with watever gamepad, wheel pluged, if my siden lightgun is plug in, activate border and stuff like that.
Like in retroarch, the emulator is doing a fine job, if a controller is plug, it doesn't care with one it is, and use it as player 1 controller. Now other emulator like RPCS3 it's an other story, if you set player 1 to use a DS4 controller, but you try to play with only a Xbox controller plugged, that will not work.

So, i have a new module called HID Device Detector :

image.thumb.png.941d2f7d0b5522cda9ea73f6f5b1e50b.png

So... the goal of this module is to detect if some device are plugged and if yes, add extra command line parameters.

Let's start with a simple exemple, let says i have a Siden Light Gun, and if plugged i want to add --useconfigfile="mysidenconfig.cfg" to the command line.
If i plug my siden and i use the HIDSHarp lib and the test button, i will see thoses two lines

image.thumb.png.f42c63ce2e864571c160375db4a7dfd1.png

SindenLightgun<>5824<>3841<>\\?\hid#vid_16c0&pid_0f01&mi_02&col02#c&1a2833ba&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
SindenLightgun<>5824<>3841<>\\?\hid#vid_16c0&pid_0f01&mi_02&col01#c&1a2833ba&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}\kbd

So, i add that on the list, and i'm pretty much done

image.thumb.png.a4267880f447afb47cfbc33d0a5b9b16.png

When i click on the Test Config button, i have :

image.png.44bd3ece789c65b33eb4da69fa06b2c1.png

Now, this is a simple usecase, the main goal of this module is not really to get the final exe args that your emulator is gonna use, but generate args that other modules (like ahk module or replace module) will trigger.
For exemple, for lightgun, you might want those args added --lightgun1=SidenBlue --lightgun2=SidenRed and if none of your siden are pluged --lightgun1=Mouse. And then, on the replace module, we will later detect those arguments and change your emulator config files.

So instead of adding the gun as Device Type other, let's add it as lightgun.
On the global config, you can see

image.thumb.png.58f9ea968de88d1437f891b78cd4afbe.png

So arguments added with start with --lightgun and there will be a maximum of two args added, so, --lightgun1= and --lightgun2=

For my blue lightgun, i want to match this line

SindenLightgun<>5824<>3841<>\\?\hid#vid_16c0&pid_0f01&mi_02&col01#c&1a2833ba&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}\kbd
My blue lightgun, always have this part "c&1a2833ba&0&0000" and i will use it to differenciate for my red lightgun.

image.thumb.png.82edf095e5cac60a136f99f9dbfc3cc6.png

So here i use a simple regex, as a side not reged as matched line by line.

Now if i click test, i have

image.png.718735c04a0f5d823000df3d41f0a270.png

Now i can add my SidenRed

image.thumb.png.71edab6f3892dcc96510d803b30d38fe.png

And let's add my Razer Naga Mouse :

image.thumb.png.92393903e78c497ce232f5ce566f5dda.png

I end up with
image.thumb.png.0ab2ee63822276a14b06659df0e1291d.png

 

If my Blue Siden Gun and plug, my Red is not and my mouse is pluged, it will go over each one (you can use the up/down button to alter the priority) and i will get :

image.png.cd8a8a2b1ebbac96ffe2c2af740aa373.png

If i unplug all my siden gun, i will get

image.png.7d24caf0e047d79777cfd672ba87b6ce.png

Later in this post, i will explain how to use those args and do stuff.

 

So, i will now give you an other exemple.
I use RPCS3, my main controllers are two DS4 controllers. Usually, i have DS4Windows activated, so it generated two virtual XINPUT controller. The easy thing to do would be to bind Player1 to XINPUT1 in RPCS3 but when i use DS4 controller, i prefer to bind it as DS4 rather than XINPUT (for motion control support for exemple)
Sometime, i do not have any of my DS4 controller plugged and i use a regular XBOX 360 controller (or a device regnized as such, like when you do remote play and it create a virtual controller)

Ok, so let's view the library data with 3 controllers (two DS4 and a X360 controller plugin)

image.thumb.png.9428bfd4a3c0fa9e00745d910a7c5660.png

I'm using the DS4Lib and XINPUT library, also, i point to the DS4Windows log folder so i can have extra data for XINPUT controller that are virtually create by DS4Win for my DS4 controllers.

I will start by catching my two DS4 controllers

image.thumb.png.8d5f8ec24fcf15d0031380ab9dfa1ab7.png

So, right now, if i add that and click on TestConfig, i will get

image.png.edfa0e6fee0c3d30c6573379ceef42af.png

And now for XINPUT i will use that :

image.thumb.png.a47a507e5dc680294926a809a8a253a7.png

On my regex, i capture the XINPUT slot number, i also want only XINPUT Gamepad, no arcade stick or wheel, and i want to excluse the lines with DS4WIN.
On the suffix arg, i use XINPUT\1, the \1 will be replaced by the first regex match, so if my controller is using the xinput slot 3 i will have XINPUT3
And i increase the max match count, because this regex can match multiple time.

If i test, i have now :

image.png.c236479012e736a84ef417f6954b0f78.png

And if i unplug my ds4 controllers i have

image.png.987a0bb49b220b1ac80a9e11cee08829.png

 

Next, i will go over the replace module to use thoses parameters and do some stuff. But i'm out of time right now.

 

 

 

 

image.png

image.png

Link to comment
Share on other sites

  • 2 weeks later...

So, i forgot to go back talk about the replace module rewrite.

At this core, this module is really simple, it's one of the core module and his role is to alter the command line.
I expended quite a bit this module and now, it can also alter files.
Paired with the HID detection module i talk earlier, it make it possible to do stuff like altering emulators config files before the emulator launch.

Now, honestly, the module is quite complex and i will not go deep, just give a few exemples.
Like with simple64, i have an xinput controller that need to use a different button layout than my other controller.
I use the HID module to add a command line with --controller1= and give me some info like the controller name, the SDL id, etc (simple64 use the SDL and the config file need a numeric index and the controller name)

To replace for my controller 1, i use that
image.thumb.png.3642c7bc84a6899d04832555b29cfa62.png

And Variables is a bad choice of words, it's more like Macros. It's just text that will be search and replace. Those can be used in the Search/Replace With or Even the file Name.
image.thumb.png.973119e3f12db094a4acc8d9203d99ba.png

Like here for exemple, in my "Replace With", {PAK} will be replaced by "Memory" if i called simple64 with a --mempak argument, or it will be replaced by "Rumble".
And you can do some complex shit, like feed the content of the variable with content of other text files, or even generate them with ahk code.

 

 

 

Link to comment
Share on other sites

Now, there is an other module i'm working for what i would really needs testers and people experimented with webdesign. It's a PauseMenu (who also do Start & End Menu).

image.thumb.png.895af64960c90b1203b4a10983a14756.png

It's not finish yet, but i'm getting close.
The main idea and the big difference with other tools is that it just load an HTML page. Except for Pause & Resume ahk code (that are loaded before and after the pause menu show up), all ahk code must be directly called from the HTML file. (a call to href="ahk:<codeinbase64>")
So, you want to add a menu option ? No problem, you just make a custom html file for your emulator and you add a button.

Also, the html page can have part of the content replaced with the Variable (i mentioned earlier on the remplace module). So things like remplacing the title with the game name is simple. And you can do some advanced stuff like make a submenu that list retroarch savestates.

For now, i'm not done, and i'm not the best to make great design.
I tried to put some html code together to make some sort of template, but it's just an exemple, since it's just html code, you can do whatever you want.
http://virtunys.free.fr/demopause/

 

Link to comment
Share on other sites

Ok, i'm progressing on my pause menu. Not ready for production yet, and i'm focusing on basic features for now.

 

 

Edit 2 : 
And for the demo, that's an html i made just for retroarch, with the ability to choose the save state.

All is done within the html file, so that's the interest of my project, it's totally configurable.
Inside my html page, i have a javascript function that make an ajax request with some ahk code in parameters to get the savestates files.

Edited by Nixx
Link to comment
Share on other sites

  • 1 month later...

This app is INCREDIBLE! Really appreciate all the hard work you've put into this. I was wondering if you think it'd be possible to integrate the emulator hijacking functionality directly into BigBox as a pre-launch options menu, where users can toggle args on or off before starting the game? So for example, say I wanted to be able to pick whether or not to enable the game's preset shader in RetroArch by checking a box in BigBox, or rotate the emulator's video output 90 degrees for games that natively support vertical screens. Right now I have a few combinations of commonly used settings like these saved as Additional Apps, which as you might imagine doesn't scale super well!

Link to comment
Share on other sites

Thanks.

Technically, you can already do that. You just have to create a Copy of your emulator and add the command -rotate to the command line. Then in BigBox Profile, you detect the arg, do your thing (like editing config file for exemple) and remove the temporary arg before calling the exe.

I started to add some exemple of things that i did on the wiki, but i'm kinda short of time at the moment.

https://github.com/nixxou/BigBoxProfile/wiki

 

Link to comment
Share on other sites

I think I follow. I'm doing something sort of similar already, except my concern is that the combinations of the various flags I use will get out of hand pretty quickly, not to mention I've got some games that need to run on alternate emulators/cores and this method has no way to really take that into account. I guess what I'm wondering is if you think it'd be possible for me to set up some kind of form in my theme with a bunch of checkboxes for each flag, which the user can pull up in the game details screen before launching it, and toggle whichever combination they want which would then be passed into BBP and used to load the correct setup?

Link to comment
Share on other sites

On 11/29/2023 at 8:47 PM, pixelSHREDDER said:

I think I follow. I'm doing something sort of similar already, except my concern is that the combinations of the various flags I use will get out of hand pretty quickly, not to mention I've got some games that need to run on alternate emulators/cores and this method has no way to really take that into account. I guess what I'm wondering is if you think it'd be possible for me to set up some kind of form in my theme with a bunch of checkboxes for each flag, which the user can pull up in the game details screen before launching it, and toggle whichever combination they want which would then be passed into BBP and used to load the correct setup?

Ok, so just to know if i get it right (i'm currently working on something else, so i have no eta) :

In Bigbox, you want an option menu like "Game option", with a list of option Emulator/Platform specific that could be configured, for each option you add an argument like "Enable Reshade" = "--reshade" and set if on/off by default for the whole game/plateform.
When you go on this "game option" on a game page of bigbox, it will show a list of option you can either enable/Disable and eventually an extra option, "Set As default for this game".
Then when you launch the game, it will apply those arguments of the selected options.

One technical limit would be that to browse within the option menu, i will be limited to keyboard and Xinput first controller, i don't know if that can fit your needs.
 

Link to comment
Share on other sites

@Nixx this is amazing. Great work! Question: would it be possible to have multiple Bigbox settings profiles? My idea is to be able to have multiple Bigbox theme selections/views/transitions/options/etc profiles. So depending on the launch is how Bigbox would look and behave.

This is because i have a lot of platforms and playlists, each configured with specific themes and views, and i would love to try new themes and settings, without potentially losing/overriding my current config.

Link to comment
Share on other sites

On 11/30/2023 at 2:25 PM, Nixx said:

Ok, so just to know if i get it right (i'm currently working on something else, so i have no eta) :

In Bigbox, you want an option menu like "Game option", with a list of option Emulator/Platform specific that could be configured, for each option you add an argument like "Enable Reshade" = "--reshade" and set if on/off by default for the whole game/plateform.
When you go on this "game option" on a game page of bigbox, it will show a list of option you can either enable/Disable and eventually an extra option, "Set As default for this game".
Then when you launch the game, it will apply those arguments of the selected options.

One technical limit would be that to browse within the option menu, i will be limited to keyboard and Xinput first controller, i don't know if that can fit your needs.
 

Yeah, that's exactly what I was picturing! Would it be easier for you if the option menu was rendered in the theme itself instead of directly in BBP? If so I could probably handle creating that aspect on my end if you knew how I'd go about passing that data along to BBP.

Link to comment
Share on other sites

  • 3 months later...

Thanks for this!  It's the missing piece I needed to run BigBox in my somewhat complex monitor setup - Widescreen primary monitor and a "headless" DisplayPort dongle.  I wrote custom resolutions onto the DisplayPort dongle EDID, so that I can stream full resolution to iPad Pro, iPhone, and 4kTV with Moonlight/Sunshine.  Sunshine invokes DisplayFusion to set the dongle as the primary monitor and the resolution according to the device I'm streaming to (and back when I quit).  This was all working great for Steam (for Steam games) and Playnite (non-Steam PC launchers like Xbox GamePass, Epic, Ubisoft, EA, etc.).  I wanted BigBox specifically for retro gaming, and man... it was NOT working well until I found this.  Awesome stuff!

Link to comment
Share on other sites

  • 1 month later...

So if I'm understanding this correctly I could use your HID Device Detector so It would pick the correct controller or setup before launching an emulator?

I was following the guide, and it found the controllers I wanted. But not really sure how it would then get applied to anything.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...