33 comments

[ 0.24 ms ] story [ 82.6 ms ] thread
You should add "democratic mode" - every button push counts as a vote for that control. An election is held every X frames.
Good idea! Adding that to my to-do list.
Twitch Plays Pokemon (2014)
That's exactly what inspired me to make this, I wanted to learn about WebRTC and used that idea as a base but also wanted the potential to play more real-time titles as well.
Curious what is the advantage/disadvantage of WebRTC for an application like this vs WebSockets?
Great question my original implementation was actually with WebSockets for this. I ended up going with WebRTC as I'm using AWS APIGateway and streaming data for things like audio and video end up being very chatty or you end up buffering to reduce chattiness (and cost) but introduce lots of latency. I decided to shift to a peer to peer model to try and keep the latency down and use the websockets implementation I'd written as a signalling server instead.

Websockets are way easier to comprehend and implement than WebRTC (learning the connection negotiation process for NAT traversal isn't much fun). But in the end using WebRTC meant I could host a more cost effective demo that could still scale reasonably well.

I can't believe it has been almost 10 years since Twitch Plays Pokémon.
Best mode is where decision makers are given power without any accountability. We just finished "The Legend of Gain of Function" and we were all surprised to not finish the game.
Also “anarchy mode” where it switches to a new random player after every button press.

Would be pretty fun once there’s more than a couple people connected.

Very cool what games work with it? Have you tired Pokémon battles
I haven't exhaustively tested the emulator, but haven't found anything that doesn't work so far. Pokemon battles work well, was testing it with some friends today, with shuffled controls it was pretty fun.
So... this doesn't have head to head (i.e. where you'd connect two gameboys with a cable and play Tetris)?
Not at the moment, but that's possible to implement by extending the emulator and this webapp. This implementation was more inspired by something like twitch plays pokemon (multiple users competing for control), but on a smaller scale and also playable with more realtime titles.
So, there's no actual device, right? It's not a gameboy, but a custom web-ui for emulator
Correct, just a webapp with peer to peer multiplayer (where players compete or cooperate using shared control of a single Gameboy)
Yeah, I was expecting a hardware article, not a GitHub repo.

Should probably add “emulator” the the title.

Great work! It would be nice if the demo page had a game ROM ready to go. You could probably find something free and/or open source on itch.io.
Great idea! Will look into adding that in.
Or put up something yourself made with GB Studio.
Shocked the Lambdas are good enough for perf needs.
The lambdas themselves do very little, most of the work is actually done by the game host. The bulk of the work for the lambdas is to process websocket events for signalling to establish peer connections.
I get a 'oops not ready' message when trying to load a ROM file on Firefox (Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0). Here's where I got the ROM from: https://radicorn.do.timdeve.com/
Looks like the linked game is a GBA game, for now this is just a GB emulator (can probably play some GBC titles as well). Was considering making a GBA version of this though.