MakeCode Arcade Online Multiplayer

Following up on my son’s wishes to show, test and play eachother’s multiplayer MakeCode Arcade games with friends and family that are not in the same room, I have tried without major success to find some good solutions for connecting two(or more) people to play games in the web simulator over the internet.

I therefore start this topic in the hope of gathering in one place the knowledge that already exists and in time will be discovered in the community about online multiplayer MakeCode Arcade.*

(*For the sake of my son’s and everybody else’s online safety, and true to the spirit of this forum, I am not seeking any solutions here with totally open and uncontrolled public servers or online play, but rather secure peer-to-peer connections with a known counterpart, or some safe and controlled online community like this forum(like maybe some kind of integration with the XBox network etc.).)

What I have found and tested so far:

  1. As mentioned briefly in an official MakeCode Arcade Advanced YouTube video, there was a Hackaton in 2020 that came up with a solution that is still online:
    https://microsoft.github.io/arcade-mp/

    It works fairly well, with some lag on the client game side, not sure if it sends screenshots from the server to the client, or if it just sends and keeps track of button presses between two separate game instance. I have so far only tested over LAN between to separate computers with different browsers(Mac and a Chromebook), and i am not yet sure if and how well it performs over the internet, whether it tries to establish a direct connection or relays through a Microsoft server somewhere etc.(though the lag on a fast LAN might indicate the latter). In the video @jwunderl** mentions that it might not work on newer games anymore. Since I don’t know about that many multiplayer games, I have only tested with the Taekwondo Fireball Magic Fight, an older two-player game, which worked ok.

  2. Parsec is a low latency solution for streaming games and multimedia over the internet. As a server, you can stream the whole desktop(including the MakeCode Arcade web simulator game, and it allows for connections to multiple clients, whose gamepad and keyboard button presses are sent from clients to the server. There’s a secure 2-step verification login system to invite trusted peer clients to connect, and apart from setting up the connection via Parsec’s own server(normally no need for firewall settings or port forwards on the router), the connections are peer-to-peer the MakeCode game server and client. It is possible to share only a browser tab instead of the whole desktop, and they also have an Arcade solution and community, but this is in beta and I haven’t tested it much myself.

  3. Moonlight game streaming works somewhat similar to Parsec, but requires a Nvidia graphics cards and GeForce Experience(unless coupled with the Sunshine gamestreaming host) on the server computer, only 1 client can connect to the server at once(2-player only) and there’s no login system included. However, hassle-free connections without firewall modifications or port forwards, as well as secure connections with trusted peers can pretty easily be achieved by Moonlight game streaming through a ZeroTier VPN LAN-over-internet. On the pluss side, my experience is that the graphics are faster and better through Moonlight, and both Moonlight and ZeroTier are open source and transparent(both Parsec and Moonlight are cost free for private game streaming use AFAIK).

(**By the way, @jwunderl: Are there any query strings or “magic” flags for the https://microsoft.github.io/arcade-mp/ webpage/server, that allows for loading an iFrame with a chosen game directly via an URL, like you can do with the #pub: in the MakeCode Editor, instead of always starting with the “Secure the river game” at https://aka.ms/jowunder-multiplayer?id=32777-59846-95775-11055&nofooter=1?)

There are of course many other game streaming options like Steam Link, Rainway etc. which I have not tested, and I am wondering if the Libretro/RetroArch Netplay solution maybe could work for native executables, since I have some vague memories from some years ago, when testing an emulator(C64?) which was neither “serialized or deterministic”, that it had some backup-solution that streamed button presses and game frames that accomplished peer-to-peer Netplay connections(not on any servers, but that is also the whole premise of this post not to prefer, anyways…)

Hoping to read here about some other and better working or easier/better integrated solutions for online multiplayer MakeCode Arcade games!

2 Likes

That arcade-mp demo was just using peer.js and mirroring over the screen / sending button events to and from the one who started the game, which is… not ideal for many types of games as we saw. As you saw in pxt-common-packages we’re still investigating some ways in which it could be implemented in a nicer way.

The reason it was stuck on an old version was because I had forked a lot of the code to get the multiplayer working in the few days I had for the hackathon, which is why I have it living at that aka link with an upload target. In fact, most of the code that was merged recently with e.g. the pxt-common-packages changes related to multiplayer was directly taken from the branches I made for that build and cleaned up a bit to get it into a state that it could be merged, so it’s likely we could get that cleaned up to just run off beta pretty quickly – I’m busy for the next week or so with ‘real work’ but I’ll try to find some time to get that hackathon site slightly updated so we can have something to play around with. (If you want to make any games in particular, I’d note that aka.ms link just goes to a custom build of arcade I made – so if you go to the link and run the ---run at the end it will bring you to the arcade homepage of that forked version. It looks like I had based it off arcade version 1.1.3 which is old but not unusable I guess (although there will be a few bugs you wouldn’t see in the real version, e.g. because of that hack I made for sending buttons it always has a second sim running :slight_smile: ))

There aren’t any query strings to set a default game but if I can get time to update the build of arcademp I can probably add that pretty easily :slight_smile:

(also, thanks for the research / write up on parsec / moonlight game streaming, it’s interesting to see what’s available as we look at other possible solutions.)

2 Likes

Can you send me the get hub link to the repo of the hackathon project in 2020

Thanks for your quick and informative answer!

I did not want to spoil your joy of presenting the great news of your recent online multiplayer efforts, so hesitated to mention it here until it was intuitively functioning and “official”. But now that the “cat is out of the box”, I hereby and relevant to this topic provide also a link to the recent multiplayer merge that you are here mentioning:

If I understand you correctly, the best of two world is maybe to have something similar to the hackathon site(or integrated into the beta simulator player) to play around and test the master/beta branch of the new official online multiplayer functionality and its development going forward?

Same here, that maybe query strings to load games directly in multiplayer mode or a multiplayer ready beta simulator player, could be an idea going forward?
(Just thinking about saving efforts and resources from having many different snapshot systems not following the main pipeline. But you know best yourselves how to rationalize; the community is probably just happy having it working somehow with their newest creations.)

Coming from an office Citrix/RDP background with choppy video and sound, I was just blown away by the technology and suddenly being able to stream an play games in 1080p(today 4K) near real-time(for me not a professional gamer and not as quick reactions as the youth, 10-20ms latency is real-time), immediate reactions to controller movements and streaming real graphic intensive games on the mobile on the go or at a mountain cabin, only needing one central powerful gaming rig server and weak and cheap RPis, Apple TVs and old laptops/Chromebooks elsewhere etc. -Even an old PS3 is casually playable going first into a capture card on the same gaming server, or streaming XBox One or GeForce Now to it, and then game streaming this further to the same devices and on the go(50-70ms)!.. -Almost as fun and impressive as MakeCode Arcade! :wink:

Anyways, and on that note, it might be worth mentioning:

  • The MS XBox/Cloud streaming protocol and MS Wireless display(as you probably know better than me) is quite capable as well and in-house(but less available for free use cases for the masses).
  • Parsec has an API and SDK which in the beginning was aimed at game streaming/online multiplayer for games, which probably was the reason why they were acquired by Unity. Though sadly not very permissively licensed.
  • The Moonlight/Sunshine are impressively industrious for being a side hustle started as a school project, and very helpful, forthcoming and responsive with a great user community.

Looking forward to seeing what more is coming in the near future! Keep up the great work!

Yeah, I meant since my forked code pretty much got merged in as is with only small tweaks there’s no reason for the hackathon site to be based off that super old version besides just that it takes a bit of time to update it.

Ah, I just meant adding to the arcademp github pages site something like an optional ?id={sharecode} that starts with that game instead of a the fishing like game, similar to if you had pressed the plus button :slight_smile:

@Lucas_M the repo itself is private for now as it was just a quick hackathon project

2 Likes

Both sound great, and looking forward to it!

1 Like

I’d love if we had a good way to do miti player

Is this:

  • somehow related to or already supporting online multiplayer(mp)?
  • and somewhere that could already alleviate your extra efforts to update the hackathon site?
  • or somewhere that would be an idea to include your online mp functionality of the hackathon site and recent mp commits?
  • and/(or just) a cross-platform (also offline) PWA with local mp and no possibility(or plans) for online/LAN mp?

“Scenario - classroom teacher wants to create an Arcade Kiosk populated with games from his/her students.”

Imagine how cool it would be with a cross-platform MakeCode Arcade app with multiple(any) games and that would also support local AND online multiplayer and with controller support!!! :wink:

1 Like

Ah, that’s unrelated to multiplayer experiences / that was made for making experiences like the kiosks we had at iste easier

in particular to play along with https://arcade.makecode.com/hardware/shoebox-controller and make it so eventually we could have it just like ‘follow these instructions to make a simple cabinet controller, then load this up in the browser to make a custom kiosk’. A little bit more to go to complete that goal though :slight_smile:

1 Like