Can I add juxt to cemu, or is that not a thing?
I don’t believe it works on Cemu.
You can’t, it’s not even a Option in Dumpling…
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:
- Search your NAND for
nn_olv.rpl
- Patch
nn_olv.rpl
to replace the API endpoints with ours - Search your NAND for
wave.rpx
(the Miiverse app) - Save the patched RPL as
pn_olv.rpl
in the same directory waswave.rpx
- Patch
wave.rpx
to replace thenn_olv.rpl
import with the newly patchedpn_olv.rpl
- Patch
wave.rpx
to add our domain (Miiverse is just a browser) to the internal whitelist - 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
How much time did you spend writing this?
I bet 15 minutes at least.
Atleast he puts thought and logic into what he posts and has good grammar ahem (those are anything BUT what i can do properly)