Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: I built a multiplayer Gameboy (github.com/tjholm)
157 points by tholm on July 27, 2023 | hide | past | favorite | 32 comments
Still very much a work in progress, but really wanted to share this even in it's early state. Had heaps of fun building it to learn more about WebRTC.



You should add "democratic mode" - every button push counts as a vote for that control. An election is held every X frames.


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.


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.


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.


Good idea! Adding that to my to-do list.


very cool. uses similar ideas to https://snes.party and https://nes.party


Thanks for sharing this, wasn't even aware these existed, it's actually something I was thinking to working on next.


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.


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.


Thank you for the explanation :)


This is super cool! What emulator did you use? Would be cool to add this to https://afterplay.io


I used https://github.com/roblouie/gameboy-emulator which I forked and made a very minor tweak to allow streaming audio over WebRTC. Code was super well organized and easy to understand. Was also very easy to integrate into the webapp.


For people who were expecting online multiplayer with physical game boys, check this out: https://youtu.be/KtHu693wE9o

It uses the Link port to simulate local multiplayer over an RPi Pico.

I’ve bought the kit (https://stacksmashing.gumroad.com/l/gb-link) and it works great.


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.


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.


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.


Makes sense. Thanks for clarifying.


Its just RPC


That’s cool :)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: