Current State of Jubeat Emulation
I’ve been very interested in Jubeat (latest version is
jubeat festo, released in 2018 to commemorate the game’s 10th anniversary) ever since first playing it back in 2017 in London’s Las Vegas Arcade Soho. Unfortunately (or fortunately, for my time) since I moved to Cambridge, there are few opportunities for me to go and play.
The game is notoriously hard to translate into a PC-environment due to the the 4x4 grid and custom cabinet. Jubeat is also less well-known in the Western world, compared to games like Taiko no Tatsujin or Osu! Tatakae! Ouendan (known as Elite Beat Agents) both of which are emulated (and arguably superseded) by osu!. There are custom $400 USB controllers that require a separate 27” monitor.
The best way to play Jubeat is to get a bemaniPC (or use a HDD dump though it’s all a bit hush-hush; a better English level guide can be found here) and do some hardware hacking-about. After all that trouble, you can get a setup that’s close to the real thing.
There are a few good private trackers for Bemani content. A good summary of the whole situation, as mysticrudnin put it here is: “The right way to get an invite is to become active in bemani communities until you are friends with someone who can give you one. […] I don’t know what you think sows is, but the bemani community in general is very tight knit. People mostly know each other. It’s not just a faceless group putting up pirated content. It’s close and real-life friends sharing with each other. People who come in to sows and snatch stuff without being a part of the community and contributing aren’t really welcome. This is both good and bad from your perspective. If you’re genuinely interested in bemani, you won’t find it hard to get an invite.”
Best way to get into this scene is to join a Discord and start chatting to people - it may be a bit imposing, but people are usually happy to help if you ask nicely enough.
If you’re intrigued (rightly so), an interesting article on Konami DRM was written by mon.im.
There was once two main emulators that didn’t use dumps but memo files instead (explained later) :- Jubeat Analyser, and Youbeat (note the use of past tense and a link to WebArchive). There is also an “improved” (in quotation marks because I can’t personally vouch for this) version of Analyser called Jubeat Analyser Append (the download has been
discontinued but you can easily find the MediaFire link via Wayback).
Memo files are just text files that encode the note timings, much like .osu files. The main two repositories for these are jubeat_memo and cosmos memo. They do not come with the song MP3s. Jubeat Analyser supports both file formats (I think?), but there are tools to work around that.
On a technical note, here is an explanation of the file format. It’s pretty understandable with the use of Google Translate. There is also an open-source Jubeat-Emulator which would be useful for understanding.
I’m rocking an iPad 4 (perpetually on iOS 10.3.3) which doesn’t give me a lot to work with, but it’s a touchscreen and a relatively big one at that. It’s too much of a bother getting Jubeat Plus working on iOS and it also severely limits the song options. On the other hand, Jubeat Analyser is just grand but playing using a keyboard isn’t fun…
Enter the most overly-specific engineering problem to date. Use Rickpactor (because CydiaImpactor doesn’t work anymore, may it rest in peace) to load the iOS version of LÖVE onto the iPad. Write a quick and dirty LÖVE program to display a 4x4 grid and send network packets to my PC with relevant pressed/released data. Then write a quick C# feeder that will pick up these packed and map them to keystrokes (matching up Jubeat Analyser’s setup).
I’ll make another blog post if I get that convoluted approach working..
that convoluted approach (3/5/2020)
I got this whole thing working faster than I expected. LÖVE will never cease to amaze me with how great it is for prototyping. The GitHub repo can be found here. Have a look at the video below for a demo, keeping in mind I haven’t used the setup long enough to get good (it’s hard to know where the buttons are without looking and without haptic feedback; though I have an idea to fix that…):