Host your own Pretendo Network server!

I’ve been working on this project for a while. It’s a way for you to self-host your own Pretendo Network server using Docker! It’s also a fully featured development environment with support for code editing and debugging. Check it out! (and feel free to star if it’s useful)

For the setup guide, please visit the documentation site.

Not all of the game servers are supported yet, check the containers table for a list. Here’s the roadmap issue with my plans for the project.

10 Likes

This would be great for Wii U LAN Parties! Especially when Wii Us are pretty affordable, it would be perfect for local Splatoon and Mario Kart 8 battles legally and affordably!
image

6 Likes

It’d be awesome if we got officially verified MacOS support! I could run it on my Mac Mini with my Minecraft server :open_mouth:

I think that it should work on MacOS, I just don’t have the hardware to test it. If anyone wants to try, feel free to do so and update me! :grinning:

Edit: This has now been tested and is confirmed to be working!

3 Likes

Quick question, why would you bother listing the wii and switch just to say unsupported, it would save on space if you removed them and removed the double asterisks from the legend, as they are both redundant as pretendo in general will never support them, and that’s stated as such nearly everywhere

1 Like

I could probably try testing it on an old late 2009 imac I have access to

Feel free to try, but that’s pretty old so I don’t know what the Docker support looks like. I’m more interested in seeing whether it works on one of the new ARM Macs because I don’t know if everything I use supports ARM.

That’s fair, it probably doesn’t make sense to have that there. Also, having all green checkmarks would look nice :slight_smile:

I believe it’s relevant. People ask if we support the Wii/DS/Switch all the time, so it’s not always clear to people. This is why we have it in our FAQ. Also our tools can be used to make Switch servers, so it’s not outrageous to ask if that’s supported here either tbh.

4 Likes

I assume it’s mainly NEX-related ones? Remember hearing about the Switch using it with ENLBufferPwn ages ago.

Not sure how similar the systems are since I’m not familiar with how the online functions all work unfortunately.

Early Switch games used NEX, correct. More recent ones use a new system called NPLN which is gRPC based rather than UDP based, and provides some more features.

The Switch has used various technologies for its services over its lifespan, and has swapped out several of the older ones for more modern solutions.

With the v2 rewrite of our NEX libraries we’ve transitioned from hyper-focussing on the Wii U and 3DS specifically (though it is our target platform), and instead are aiming for a more general/complete implementation of the libraries.

Nintendo did not make NEX themselves. They licensed an existing piece of software called Rendez-Vous from a company named Quazal (sometimes referred to as “RDV” or “QRV”). RDV is designed to be extended, being able to add custom protocols and replace large portions of it’s internals for your own.

This is what Nintendo did. They licensed RDV, modified it, simplified the protocol (Nintendo does not use the more advanced features of RDV like compression, unreliable packet transmission, etc.), and rebranded it as NEX. When they transitioned to the Switch, they completely swapped NEX’s transport protocol to make it function over WebSockets rather than UDP connections.

Our v2 rewrite of the NEX libraries is now a more general RDV implementation, being closer to how Quazal originally implemented it (which can be seen by our changes in our own naming conventions). By default the libraries are configured to act as Nintendo’s variant of RDV for the Wii U and 3DS, but they can be reconfigured to work for both the Switch and non-NEX RDV clients.

In fact, this has already been done. During our testing of the v2 rewrite Dani would sometimes test the libraries with Rayman Legends, a non-NEX RDV game on the Wii U:

A project called GoCentral also made Rock Band 3 servers for the Wii, Xbox 360, and PS3 using forked/modified versions of our v1 libraries (there’s some irony there). So they’re also usable on totally different platforms.

Some new 3DS games also use the Switch variant of NEX (minus the Web Sockets), which is why we support it.

2 Likes

Ok, that makes sense, I’ll remember that for the future, I was under the assumption that it was a no-go, but thanks a ton for telling me!

On another note OP, I’ll probably be able to test either Thursday or Friday on the imac

And I could probably try on a couple of sbc’s I have if I get the time for testing ARM support (sorry for all the edits lol)
But the project looks awesome, great job!

1 Like

If I can find the time in the next few weeks, I can try it :slight_smile:
I’ve got an M1 Mac Mini so I’ll be able to test there o7

3 Likes

Sounds great, more testing is always appreciated! If anyone have any incompatability problems, please create an issue on GitHub.

This is exactly the kinda stuff I wanted to see for long now.

Granted, I want the player base to stay together and I think times will get better again once there’s a fix around the current SSSL dilemma (aka more people install Aroma), but for the same reason I want to see the WiiU/3DS service to continue function I want to see an easy to set up package to run things locally if there’s no one on the web to do it.

this is extremely useful, pretendo has always been an open source project after all

After reading some posts in here, yeah this could be really neat if your hosting a splatoon tournament say… would help take some of the load off the main servers too then

2 Likes

I feel like I should make this clear: This tool is most useful as a development platform. This tool aims to set up an entire separate instance of our whole network stack, for all services. Anything you do when hosting this will NOT be reflected on our services, including even basic things like account creation.

That is why it’s in the Technical Discussion - Pretendo Network category, and not somewhere more general.

If you do things like self host this, shut it down, and try to connect to Pretendo again with that account, then you won’t be able to as our servers will have no records of those accounts.

Please only use this if you know what you’re doing, to avoid issues like potential data conflicts.

If all you want is something like a local instance of a specific game, for the mentioned LAN parties/private tournaments, then what you’re actually looking for is our upcoming “3rd party server” system. This will allow developers to register their own instances of specific servers with our account server, giving users the ability to select one of these other instances to connect to rather than our own. This system works in tandem with ours, piggybacking off of our infrastructure, rather than independently from our infrastructure.

That’s not to say this isn’t a good tool, I’m not discounting it at all. It’s a great piece of software and we’re considering making it an official part of Pretendo and bringing Matthew on as part of our team. But again, please only use this if you know what you’re doing and have a good reason to do so. That really goes for all development tools, even ones already officially produced by us, not just this.

4 Likes

Ah gotcha, still i think its neat to see all the stuff being made for the project and so on lol but yeah like you mentioned it probably would be better to wait for the “3rd party server” system in that regard and makes more sense than having to register new accounts on the separate instance and so on etc

Hope i understood that right lol :joy:

Indeed. The main thing you’ll notice is that everything runs on your own server, so you will need a completely separate account for using this setup. This will be rather inconvenient if all you want to do is get a few friends together and play some games.

I’m rather conflicted about whether to brand this as just a development environment or as a general self-hosting setup. Jon has said previously that it isn’t suitable for anything but a very small deployment. It explicitly avoids cloud services and runs everything on a single machine. On the other hand, I’m not sure if I want to brand this as only a development environment because it doesn’t require users to be developing the servers.

1 Like

Still useful either way but yeah maybe should be listed more towards that and then when the “3rd party server” solution gets released or whatever direct users towards that instead perhaps

I mean at least i hope you understood what i meant by that lol