At Box, we rely on open source software every day. That's why we give back to the open source community whenever possible, by contributing code to outside projects and sharing projects that we've developed internally.
Fast assert is a php extension that provides a nice way of making Assertions in php. It provides facilities for making various assertions using clean function-chaining syntax without having to pay any performance costs.
Spout is a PHP library to read and write CSV and XLSX files, in a fast and scalable way. Contrary to other file readers or writers, it is capable of processing very large files while keeping the memory usage really low (less than 10MB).
Box Elements are pre-built UI components that allow developers to add features of the main Box web application into their own applications. Use Box UI Elements to navigate through, upload, preview, and select content stored on Box. Box UI Elements are available as React components and framework-agnostic JavaScript libraries.
I'm building a collection of games in launchbox that are best described as a collection of open source engines, fan recompiles, fan games, and total conversions. I started thinking that a eXoDOS style release (Preconfigured launchbox with all the games set up and ready to go) would be a worthwhile project to pursue, especially as projects get older and downloads start disappearing whether due to drama, apathy, web rot or DMCA takedowns. Not sure if I'll actually work on it for public release but it's been fun going through all these.
I'm finally nearing the end of Phase 1 of my all encompassing emulation project. Previously I spoke about how LaunchBox solved many of the issues I had with Retroarch's library management, or lack there of.
The final part of this phase involved importing my disc based console games, which constituted of unzipping and transferring over ten thousand disc images from one hard drive to another, importing them into LaunchBox, then using a LaunchBox plugin to bulk convert the bins/cues to Compressed Hunks of Data, or .chd's. Since I'm dealing with terabytes of data here, this has literally been a five day process, and I'm looking at at least 24 more hours before the current one finishes up. Thank goodness for Evo, giving me something to watch between database imports.
The process hasn't been without hicups. The most commonly available collections all have bad dumps scattered throughout them, and figuring out how to identify 300 folders out of 7400 that contain bin files but not cues has led me down some powershell rabbit holes.
Last Week I wrote about my yearly attempt to build a one stop shop for emulation using Retroarch, and my frustrations with its design intents vs my intents. I was prepared to bounce off of it again, but spent a day looking to see if there were solutions out of my personal hell.
It turns out I had known about the solution all along, but didn't know it had grown to meet my needs since I had first heard about it. LaunchBox, originally designed as a front-end to DOSBox, has expended its reach to become a front-end for any piece of emulation software, as well as your steam, gog, epic etc library.
The concept of front-ends for emulators has been around for a while of course. MAME has dozens like MAMEUI and HyperSpin, and Retroarch is technically a front-end for libretro. In the course of this project I had considered using an alternative libretro front-end, but most of them had the same problems as retroarch or are hardware targeted builds, something I wasn't concerned about since this was to run on my desktop.
LaunchBox however, is a front-end for any emulator that can take command line arguments, including the entirety of retroarch itself. This immediately solved a few of my worries using retroarch, like running emulators for newer systems like the Xbox 360 and PS3, as well as using bleeding edge emulators that might not have a libretro port. That only scratches the surface of what Launchbox offers though.
As I mentioned in my previous post, the biggest problem with Retroarch is that if you want to use the entire library of a system, you end up with a playlist that has dozens of redundant entries. If a game came out in several regions, has dumped betas, or several revisions, your playlist will quickly become unmanageable. There are ways around this, separate regional playlists, rom managers that prune out "redundant" items etc. But if you want to have all those variations available for research purposes or other reasons, you quickly run into an organizational nightmare. And all of this is before you take into account romhacks and fan translations, which retroarch's database just doesn't cover (they instead prefer you to "hot-patch", which means you end up maintaining a database of ips files in addition to your roms).
Other emulation front-ends have had solutions for this problem for a while. MameUI and MAME's dat files know to combine the various regions, prototypes, hacks and bootlegs into one entry per game. LaunchBox does this too, but for every system. This also means I can add fan translations and romhacks to the game list (though I'll get into the complications of that in a future post).
Now instead of scrolling through two dozen beta copies of The Golf Magazine Presents - 36 Great Holes Starring Fred Couples every time I want to explore my Sega 32X library, I am instead given the option to choose which version to launch. Suddenly the clutter is gone. In its place, we now have Discovery.
The problem with having access to hundreds of thousands of games is finding new and exciting games you haven't ever played. Most emulators, flash carts and ODEs just display a list of file names. A common occurrence when sitting down with any of these is rapidly cycling through the list trying to find the perfect game for that particular session. LaunchBox on the other hand has a database that contains incredibly useful information for the selected game. Screenshots, game play movies*, developer, genre, number of players, and a brief description of the game for every game in their database.
The effect this has on game discoverability is huge. During the process of waiting for all this media to download (automated by launchBox), I found myself playing games I haven't heard of for 30 minute stretches, simply because the screenshots or description caught my eye. In all my years of Flash cart, ODE and emulator usage, this has rarely happened.
All of this database management is of course useless if the emulation experience isn't great. Luckily this is taken care of by just using Retroarch as the emulator of choice for a particular platform. LaunchBox can download, install and configure the cores for you. Launching a game launches it in Retroarch, and from there you can access all the features that make retroarch appealing such as core configuration, netplay, automatic controller configuration etc. It'll also do this for MAME.
Surprisingly the core features, everything I've talked about so far, of LaunchBox are free. LaunchBox however has a paid version ($30 a year, $75 lifetime). Included in the paid version is Big Box, LaunchBox's 10 foot UI. Yesterday Big Box got an update with a new default theme and tons of optimizations. It works fairly well, and is highly customizable. A 10 foot UI was a must for my use case. I don't think Big Box alone is worth $75, but I do think LaunchBox as a whole is worth $75.
As video games age, the problem of presenting them in their original form with context becomes more challenging. LaunchBox has become the perfect vessel for highly curated, player focused collections of games. eXoDOS, eXoWin3x and eXoScummVM are huge community curated collections of DOS, Windows 3x and ScummVM compatible games that use LaunchBox as their front-end for managing their massive collections.
For the first time ever, a project I've been tossing around in the back of my head for years is finally getting off the ground. All it took was finding the right software. Now where did all that extra hard drive space I had go?
Frontends are programs that address a quality-of-life issue that emulators may not fulfill. For example, some emulator developers skip the user interface portion of development by having the user launch them from the command line. This usually means opening Command Prompt in the folder where the emulator is installed and typing something like emulator.exe game.rom. From a usability perspective, this is not optimal; running emulators from a shell can be considered tedious if commands aren't already scripted by the user (and they can't be expected to know how to set up such a thing if their first time loading the program is a black window that pops up and then disappears). To avoid this, many emulators will try to incorporate some kind of graphical user interface (GUI) in their standalone builds. For the emulators that never receive one however, a separate frontend project usually emerges.
These "Launchers" or "Executors" use their own graphical interface to start emulators. They're generally very adaptive and can support different arguments between emulators to ease integration. These frontends can be used with almost any emulator of your choosing, as long as they support command-line arguments.
These "frontends" have a graphical user interface that lets you launch emulators that are included with the system, meaning it's not possible (or difficult) to incorporate other emulators. They may or may not contain original emulator cores. If a program has mostly original cores, then it's called a multi-system emulator and is not included here. If you're looking for a full Linux distribution to run on a Raspberry Pi or similar, check out our Emulation Boxes page.
MAME was originally designed as a command line program. However, when the project relicensed as open source in February 2016, they merged the frontend MEWUI into the main project as part of the MAME executable. MEWUI uses the ten-foot interface philosophy which accounts for large television displays where the user is expected to use a TV remote-like input device to navigate the menus. However, MAME still supports command line arguments, so many old launchers still work with newer versions.
93ddb68554