Does juxt work on cemu?

Can I add juxt to cemu, or is that not a thing?

1 Like

I don’t believe it works on Cemu.

1 Like

You can’t, it’s not even a Option in Dumpling…

1 Like

Sort of, but not really. Note that this information is from mid 2023 so things may be different now

TLDR, you can but it takes effort and patches to the server. See here for a super basic run down

Actual long answer:

To start, there are 2 main concepts in emulation that you need to know of: HLE and LLE. I won’t get super detailed, but you need the gist. HLE stands for High Level Emulation. This type of emulation is, as the name suggests, more “high level”. It does not emulate the hardware directly, only implementing some of the functionality. LLE, on the other hand, stands for Low Level Emulation. This type of emulation tries to emulate the systems as accurately as possible down to the hardware level

You also need to know about how titles (“games”) are structured. Again, I won’t get detailed but there’s 2 things you need to know the gist of. Every title (with some exceptions, such as content-only titles) has an RPX and a series of RPLs. The RPX is the main executable, think of it kinda like a .exe file on Windows. RPLs are the libraries the title needs, think of them like .dll files on Windows. The Wii U provides many system RPLs for titles to use for various tasks like graphics, account management, etc. One of these RPLs is for interacting with the Miiverse API, known as nn_olv.rpl (olv = Olive, the codename for Miiverse). Like .dll files on Windows, if an RPX is importing an RPL and finds one with the same name in the same directory as itself it will load THAT RPL instead of the system one, which is part of the key

Cemu uses a mix of HLE and LLE depending on what’s going on. It implements the various system RPLs itself as best it can, but you can optionally give Cemu an RPL directly and it will use it through HLE rather than its own implementation

This ability to optionally use a real RPL through HLE is what makes this whole process work

Back before Inkay had the ability to do Miiverse patches itself, we had a homebrew app called Martini for this. Martini was a “hard patch”, meaning it modified the system files of your Wii U on NAND. We no longer support this, since that’s really dangerous, but it was the best we could do at the time. What Martini would do is:

  1. Search your NAND for nn_olv.rpl
  2. Patch nn_olv.rpl to replace the API endpoints with ours
  3. Search your NAND for wave.rpx (the Miiverse app)
  4. Save the patched RPL as pn_olv.rpl in the same directory was wave.rpx
  5. Patch wave.rpx to replace the nn_olv.rpl import with the newly patched pn_olv.rpl
  6. Patch wave.rpx to add our domain (Miiverse is just a browser) to the internal whitelist
  7. Overwrite the original wave.rpx with the newly patched one

After that patching is done, when you open Miiverse you would be connected to our servers

Disclaimer before moving on: I have never used Martini. Before we had Martini, we needed a way to test these patches. So I would manually patch my system titles in a hex editor. So I do not actually know if Martini-patched data will work for what I did

Now as for Cemu, it’s relatively simple. I dumped my entire Wii U NAND (patched Miiverse and custom RPL included) and set it as the Cemu MLC. I then had to place various system RPLs into cafeLibs for Cemu (I forgot which ones, and some of them caused crashes. See https://wiki.cemu.info/wiki/System_RPL_Files for a current compatibility list) so that it wouldn’t use it’s own implementation

After giving Cemu my full, patched, NAND dump and the system RPLs it needed, I could open Miiverse just fine. However there were still a few issues

One feature of Miiverse is called the ParamPack. This is a piece of data sent to the Miiverse API that basically tells the server about the client. It has the title’s unique Miiverse ID, the title ID, region info, etc. Our servers validate this data for correctness and reject bad ParamPack data, since if the data is bad we assume the client is not compatible

For whatever reason, even when Cemu was not using its own implementation of nn_olv.rpl, the ParamPack data it was sending was corrupted. The server would reject the requests and cause Cemu to throw errors

As a test, I ran a local copy of the servers and pointed Cemu to that, and removed the ParamPack check on my local servers. After doing so, Cemu was able to access Miiverse just fine and post to Juxtaposition like any other client. There were some glitchy textures, but nothing major (link to my test post):

Exzap has said in the past though that he’s willing to add hacky work arounds for the issue of hard-coded URLs like we see in Miiverse, and I know that a LOT more work has been put into the Cemu implementation of nn_olv.rpl since these tests. So it’s possible that one day this will Just Work out of the box

3 Likes

How much time did you spend writing this? :rofl:

1 Like

I bet 15 minutes at least.

2 Likes

Atleast he puts thought and logic into what he posts and has good grammar ahem (those are anything BUT what i can do properly)

2 Likes