[HN Gopher] Show HN: I built a multiplayer Gameboy
       ___________________________________________________________________
        
       Show HN: I built a multiplayer Gameboy
        
       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.
        
       Author : tholm
       Score  : 131 points
       Date   : 2023-07-26 11:33 UTC (1 days ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | oneandonley1 wrote:
       | Very cool what games work with it? Have you tired Pokemon battles
        
         | tholm wrote:
         | 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.
        
       | trh0awayman wrote:
       | You should add "democratic mode" - every button push counts as a
       | vote for that control. An election is held every X frames.
        
         | tholm wrote:
         | Good idea! Adding that to my to-do list.
        
         | sharkjacobs wrote:
         | Twitch Plays Pokemon (2014)
        
           | tholm wrote:
           | 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.
        
             | daveidol wrote:
             | Curious what is the advantage/disadvantage of WebRTC for an
             | application like this vs WebSockets?
        
               | tholm wrote:
               | Great question my original implementation was actually
               | with WebSockets for this. I ended up going with WebRTC as
               | I'm using AWS APIGateway and the costs of 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
               | then 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.
        
           | gberger wrote:
           | I can't believe it has been almost 10 years since Twitch
           | Plays Pokemon.
        
         | wesapien wrote:
         | 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.
        
       | dandigangi wrote:
       | Shocked the Lambdas are good enough for perf needs.
        
         | tholm wrote:
         | 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.
        
           | dandigangi wrote:
           | Makes sense. Thanks for clarifying.
        
         | birdyrooster wrote:
         | Its just RPC
        
       | indeyets wrote:
       | So, there's no actual device, right? It's not a gameboy, but a
       | custom web-ui for emulator
        
         | tholm wrote:
         | Correct, just a webapp with peer to peer multiplayer (where
         | players compete or cooperate using shared control of a single
         | Gameboy)
        
           | jader201 wrote:
           | Yeah, I was expecting a hardware article, not a GitHub repo.
           | 
           | Should probably add "emulator" the the title.
        
       | hauxir wrote:
       | very cool. uses similar ideas to https://snes.party and
       | https://nes.party
        
         | tholm wrote:
         | Thanks for sharing this, wasn't even aware these existed, it's
         | actually something I was thinking to working on next.
        
       | pjerem wrote:
       | That's cool :)
        
       | bejd wrote:
       | 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.
        
         | tholm wrote:
         | Great idea! Will look into adding that in.
        
           | mattl wrote:
           | Or put up something yourself made with GB Studio.
        
       | noduerme wrote:
       | So... this doesn't have head to head (i.e. where you'd connect
       | two gameboys with a cable and play Tetris)?
        
         | tholm wrote:
         | 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.
        
       | vapidness_is wrote:
       | This is super cool! What emulator did you use? Would be cool to
       | add this to https://afterplay.io
        
         | tholm wrote:
         | 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.
        
         | [deleted]
        
       | seabass-labrax wrote:
       | 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/
        
         | tholm wrote:
         | 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.
        
       ___________________________________________________________________
       (page generated 2023-07-27 23:00 UTC)