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.
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.
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.
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.
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.
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 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.
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.
33 comments
[ 0.24 ms ] story [ 82.6 ms ] threadWebsockets 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.
Would be pretty fun once there’s more than a couple people connected.
Should probably add “emulator” the the title.
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.