17 ms·
Show HN: PSX Party – Online Multiplayer Playstation 1 Emulator Using WebRTC
- raunakdag 6y agoThis is pretty cool. I’m always looking for new .io games to play with friends online, and it’s nice to see more ‘old games’ being put online. Kind of reminds me of Pokémon Showdown.
- leoplct 6y agoWebRTC is really cool. Is someone using for video conferencing (Eg Zoom) ? What are other example using webrtc?
- chefkoch 6y agoJitsi
- Benmcdonald__ 6y agohttps://en.m.wikipedia.org/wiki/Jitsi https://en.m.wikipedia.org/wiki/Jitsi Yes and it works well
- ourcat 6y agoJitsi is very, very impressive. But their whole platform is also bound up with a lot of other tech in the stack. (jitsi-meet, jitsi-videobridge, jicofo and 'Prosody' (XMPP).
- MattJ100 6y agoYou hint at this being a downside, but (speaking as a Prosody developer) this is one of the things that makes Jitsi extremely powerful and flexible. For example, Jitsi delegates authentication of users to Prosody. Prosody already has a bunch of authentication backends ( https://modules.prosody.im/type_auth https://modules.prosody.im/type_auth ) and Jitsi benefits from these without needing to reinvent the wheel. I've seen the Jitsi+Prosody combo integrated into many kinds of platforms. People also implement things like custom access control, logging, notifications and provisioning at this layer. These things would generally be harder to customize in a monolithic off-the-shelf system. Meanwhile a simple self-hosted setup is still easy enough to pull off in a spare afternoon ( https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-start https://jitsi.github.io/handbook/docs/devops-guide/devops-gu... ).
- ourcat 6y agoNot at all hinting at a downside. Just pointing out that 'Jitsi' is the sum of various parts ;) (I'm currently looking in to using Mediasoup for some WebRTC to RTMP ideas I've been mulling.)
- gregoriol 6y agoWhile the docs you point to are quite easy to follow, most of the "going further" is really not well documented... But we are indeed integrating Jitsi into a game experience here and its open-source stack is really nice to deal with (after many days needed to really understand it).
- fareesh 6y agoIt works well for 1-1, but once you start adding participants I think you have to route everything through a server if I'm not mistaken.
- deviantfero 6y agoI'd say many to many is possible for more than 2 participants, but it does get complicated, being a mesh and all, so you might opt for using an SFU to untangle that mess, but it has it's own disadvantages too.
- ourcat 6y agoSee: mediasoup for SFU. - https://mediasoup.org https://mediasoup.org
- morsch 6y agoI think Google Meet is WebRTC based, too. Presumably most browser based tools are? Though Zoom apparently isn't completely WebRTC: https://webrtchacks.com/zoom-avoids-using-webrtc/ https://webrtchacks.com/zoom-avoids-using-webrtc/ Fwiw, WebRTC doesn't imply p2p/serverless.
- ourcat 6y agoSkype has also used it for a long time. Also, aside from the obvious AV chat systems (eg: Jitsi. Zoom, etc.) 'cloud-gaming' platforms such as Google Stadia and Shadow use it. I've been monitoring and experimenting with webRTC for a few years now and one of the most exciting recent developments has been more or less full support in desktop and mobile browsers (even Safari, which dragged its heels for years)
- kevsim 6y agoWhereby.com (formerly Appear.in) has been WebRTC-based since day 1.
- InAnEmergency 6y agoYou can video chat and play chess at the same time on https://room.ai/ https://room.ai/
- kwindla 6y agoThere are a lot of use cases for WebRTC. Video calls are the biggest one right now. But anything you can imagine that needs low-latency (<200ms) video or audio is something you can potentially do with WebRTC in a browser, these days. There's a huge amount of interesting stuff going on. WebRTC is fundamentally peer-to-peer. But scaling up to larger calls, and doing things like recording, generally requires routing the audio/video through media servers that selectively forward, process, or transcode the media streams. <shameless-plug> I cofounded a company that makes it easy to get started with and scale WebRTC-based applications and features. [0] </shameless-plug> In addition to basic video calls, we're seeing rapid growth of online classes, games, fitness applications, live collaboration in productivity apps, e-commerce and customer support, and IoT and robotics streaming video. [0] https://www.daily.co/ https://www.daily.co/
- amelius 6y agoAny open-source solutions that make it easy to just slap a video conferencing tool into your website?
- jokethrowaway 6y agowebrtc is great for sending data as fast as possible to someone else, unless you need to synchronise data between multiple parties Zoom doesn't use webrtc (unless you count the browser fallback version which nobody uses), they use their own video codec - which notably uses a lot of cpu but requires little bandwidth. From my experience, zoom is the only solution where I don't experience bandwidth problems all the times.
- chejazi 6y agoI've been dreaming of something like this for a while. This is amazing. Thank you so much!
- anthk 6y agoPCSXR had netplay since forever.
- AdmiralAsshat 6y agoDoes this only emulate "local" same-screen multiplayer games, or can it also emulate the LAN-style dedicated-screen multiplayer games that supported the PS1's obscure Playstation Link Cable?[0] [0] https://en.wikipedia.org/wiki/PlayStation_Link_Cable https://en.wikipedia.org/wiki/PlayStation_Link_Cable
- hauxir 6y agothe way it works is that one participant runs the emulator locally in their browser and streams the video and accepts inputs from other room participants.
- tacocataco 6y agoBushido blade 1 used that cable. It would allow two players their own screen in POV mode. I used to work at a video rental store so I had access to two TVs, two PS1s, this cable, and the space to set it up. It's a lot of setup when you could just play the game normally on one screen. Still neat. That aside, Bushido Blade to me is still the best fighting game. If they revamped the location damage detection, and redid the graphics, I would rebuy it in a heartbeat. Most people favour the sequel, but to me it lost a lot of the charm and simplicity the first one had. One hit kills really spice up fighting games for me. Positioning and timing are even more crucial then in other games. The "juggling" and ten button combos really take the fun out of the genre for me. (nothing against the other games, just not my cup of tea) I haven't found another like it. HMU with recommendations if I missed a game!
- AdmiralAsshat 6y agoBB1 was the game I actually had in mind. Since you had a video rental store, you might've had a location actually suited for it, but for the rest of us kids, it was a tall order to find another friend who had: - Another PSX - Another copy of Bushido Blade - A spare TV that they could bring over - A room big enough to have two TVs and consoles setup within a few feet of each other so that the cable could reach. After taking the time to set all that up, simply playing the game in POV mode felt like a disappointment. But I agree, Bushido Blade 1 was the superior entry. BB2 fell into the common trap of "fix up the kinks and 'polish' the sequel, but lose what made the original feel special along the way". The other thing that most people don't know is that while each character can technically wield any of the weapons, everyone has a preferred weapon, and wielding it unlocks unique moves for that character. This wasn't mentioned in the manual, nor in any of the online FAQs back in the day, so unless you had shelled out for the Strategy Guide, that whole dimension of combat was unknown to most people. The original developer behind Bushido Blade went on to make the "Kengo: Master of Bushido" series, which was something of a spiritual successor, but IMO all of them were garbage. The closest thing it ever got in my mind was the original Way of the Samurai for the PS2 (another game which got a bunch of sequels, all significantly worse than the original).
- mentos 6y agoIf I'm understanding this correctly this offloads the copyright issue by making it the users responsibility to upload a rom? No one really talks about it but the first iPod had the same approach to letting people play their thousands of mp3 files (which I imagine 99% of were obtained illegally). Apple was eventually able to create a legal marketplace for mp3s but early days it was all napster/limewire/kazaa/etc Obviously Playstation/Nintendo roms are not as prevalent but its an interesting thought?
- daniellarusso 6y agoYou could also rip your music CDs. Apple had a marketing campaign to encourage that. The funny thing is, this is one of the current top recommended ways for DJs to acquire music in 2020, and the most affordable.
- umvi 6y agoThis is the top way that I build up my private Plex library. 1. Buy DVD on ebay 2. Rip DVD with handbrake 3. Add rip to Plex library 4. Archive DVD in disc folder Works great for "classics" that can't get much better than DVD quality anyway (i.e. any movie made before, say, 2005)
- imbusy111 6y agoAlmost all of the classics are shot on film so they absolutely can get significantly better than DVD quality.
- mhh__ 6y agoMaybe movies made post-digital but before 2005, but if you look at (say) the recent cut of apocalypse now looks unbelievably good. Like it was shot yesterday.
- jpablo 6y ago35mm film has equivalent resolution of about 90megapixels, way better than DVD quality. If a movie isn't issued in better than dvd quality is because nobody has cared about remastering them to better formats. I guess there maybe super budget, made for tv films that were filmed on tape and those certainly have reached their digital quality maximum.
- hellojason 6y agoI found their NES version[0] just the other day, tried it with a friend, and there was a consistent 0.5-1s delay with button inputs. We both tried hosting, but had same issue and couldn't play. I have to imagine that PS1 emulation would be worse? But as far as UX, it was incredibly easy get us both into a 2 player game, complete with chat, voice, and video feeds. Their buttons are mapped to keyboard inputs, so Windows users can get a gamepad working with a program like JoyToKey[1]. [0] https://nes.party/ https://nes.party/ [1] https://joytokey.net/en/ https://joytokey.net/en/
- daniellarusso 6y agoDoes it support NES 4 player games?
- hellojason 6y agoYes, there are 4 controller input options (for the NES one, at least).
- sktrdie 6y agoDo commands have to go through a server? Maybe using WebRTC to send commands directly to the other players is faster (like video/audio does it)
- samtheprogram 6y agoOn the contrary, I don’t think the PSX emulation would be worse for input lag; that’s likely all delay from WebRTC, so it’s probably roughly equivalent. For that reason it’s pretty amazing the (lack of) input delay you see with Stadia, which I believe is also built on WebRTC — although with one peer (Google) always hosting the video and the other (the user) providing input I’m wondering if there’s some clever way to improve upon this...
- joshspankit 6y agoOne trick that’s not really accessible to the general public: Stadia does some input anticipation and so will actually press the button for you just before it thinks you will press it, thus making it seem like a low-latency button press.
- tekstar 6y agoNice job! Early in the pandemic me and some buds spent a few nights on voice chat and snes.party, it helped us reconnect and reduce our isolation.
- ArtWomb 6y agoPS1 era fighting games are considered timeless. And fighting games in general are definitely the genre that has eluded easy portability to multiplayer web. If OG Soul Edge and Bushido Blade become viable again via PSX Party, it would indeed be an epic milestone in preservation!
- busterarm 6y agoI'm not so sure about this, as most people in the know were hunting down Saturn versions and 4MB/Action Replay carts. There were a few games where the PSX version was ideal, such as Rival Schools, Battle Arena Toshinden and the mentioned Soul Edge, but that was because the ZiNc/System11 arcade hardware that they ran on was literally derived from the Playstation hardware.
- _underfl0w_ 6y agoAFAIUI the legal gray area with PSX emulation (and many other consoles) wasn't limited to just the ROMs, but also the console BIOS. Most emulators would tell you to dump (or find) your own. Is that still the case, or are there free/libre reimplementations of these consoles' BIOS images out there now? Seems like they offload the responsibility of ROMs to the user (good) but no mention of the BIOS part.
- deleted 6y ago[deleted]
- hauxir 6y agoThe BIOS is loaded from the internet archive
- quickthrowman 6y agoPCSX is a PlayStation emulator with BIOS emulation (doesn’t require a BIOS bin dump) but you might as well just download SCPH1001.BIN and play games
- AkelaA 6y agoEPSXE also defaults to an emulated bios nowadays as well, which seams to work pretty well.
- oliveguru 6y agoThe most crazy thing: It is just one guy behind Kosmi!!! Crazy dude.. Keep on rocking!
- wilfredk 6y agoAwesome stuff!
- okokok___ 6y agoThis isn't open-sourced is it?
- scudd 6y agoOh man I've dreamed of being able to do a pseudo-LAN party of Time Splitters 2 using emulators over the internet. This gives me hope.
- Karuma 6y agoGreat idea, but the performance is very poor for me. The games skip frames all the time, almost like a slideshow. I've only tested it locally, by the way. (Windows 10, Chrome, i7-7700, GTX 1050.) What emulator did you use for this? (I would suggest using DuckStation, it's a million times faster than any other and more compatible than most of them, only Mednafen may work better in a few games.)
- Karuma 6y agoReplying to myself, since I bet the author won't, because they're probably violating GPL. For anyone else interested, it definitely looks like it's using MAME, which is unfortunate, since it's one of the slowest and less accurate PSX emulators out there. In any case, I'm sure the author will soon release the source code of all the GPL parts, if any ;)
- hauxir 6y agoIt's indeed using MAME, same one being used on the internet archive[0]. The source code of the GPL parts is here https://github.com/kosmigramma/mame https://github.com/kosmigramma/mame [0]https://archive.org/details/psxgames https://archive.org/details/psxgames
- sktrdie 6y agoThis is by far the best engineering hack of the year: Use off-shelf-chatrooms-software to create rooms but instead of chatting you send ROM game commands to each other and allow for multiplayer gaming!
- apkallum 6y agoCould you expand on the ROM game commands bit? Does it mean that all actions are serialized?
- tantalor 6y agoIt's a networked game... how else could it work?
- jldugger 6y agoI just don't know what a 'ROM game command' is. Seems more likely it would be controller inputs to one person's emulator? Or perhaps everyone has an emulator and the inputs are simply shared.
- read_if_gay_ 6y agoTo me it seems like just a somewhat awkward way to phrase exactly what you think it means.
- JoeOfTexas 6y agoThese things usually work by syncing the emulator clocks between clients, and then sending player inputs over the network along with the data to sync.
- sktrdie 6y agoIt’s probably really simple: if you normally load a ROM game and start a multiplayer game you control all the other players input. This simply goes next step and makes other inputs be controlled by other players.
- busterarm 6y agoSadly, you would never be able to play Bust A Move 2: Dance Tengoku Mix with this, and really that's the only game that I want to play.
- Nuzzerino 6y agoSNES party helped my partner and I get through the Covid quarantine apart from each other. I'm really happy to see efforts like this. Hopefully the author open sources this so that the community can contribute things like a more polished UI and save state management system. Seems like the kind of project that makes sense to be open-sourced.
- grishka 6y agoSo how does this work? Does the "host" run the emulator and stream the video feed of it and accept inputs, or do both players run the emulator in lockstep or something? The first approach would introduce a delay that's likely to be unacceptable for games. The second one would work better in terms of delay but would require some very tricky state synchronization. edit: the first approach would also give the host an unfair advantage because they'll have no delay at all.
- derefr 6y ago> would require some very tricky state synchronization Games for these older consoles — any generation while games were either still unikernels, or still ran on RTOSes — are already 100% deterministic in terms of what the game will do on a given frame, given a fixed history of per-frame inputs. (That might be surprising, but devs would strive to keep this property, as it makes reproducing bugs far easier.) So you don’t have to do much, other than execute the game faithfully and ship button-presses back and forth, to ensure synchronization. Of course, shipping these button-presses around to achieve state-consensus synchronously would be slow — but there’s no need to do it synchronously. All modern emulators are built not in terms of a single mutable virtual-machine state, but rather in terms of a functional-persistent chain of VM states (think a HAMT.) This is what enables “rewind” support in emulators — and more recently, “run-ahead” latency reduction (basically a type of speculative execution of VM states.) Thus, with any emulator constructed this way, it’s actually very easy to ship+receive+resolve network inputs asynchronously: i.e. to receive inputs “about” frame N while rendering frame N+M, and then to go back and re-compute the correct VM state for frames N..N+M, such that frame N+M+1 will inherit from the recomputed frame N+M. (Remember, you don’t need to run any of the IO-emulation logic for the recomputed frames, so they’re actually quite cheap to recompute!) It’s actually oddly similar to what blockchain nodes do to “reorg” when they discover a fork — just done in real-time, between 16.7ms frames.
- sktrdie 6y agoInteresting so commands are sent to other players async? Doesn’t that mean that some players will see things different than others? I my friend A stabs a monster and my other friend B also stabs a monster but they come in different order I would see A killing monster, but others might see B killing it instead? Edit: probably the order of commands is kept in order via the chat room server no? But then what is it using WebRTC for? Perhaps the “host” is e source of truth for the order... meaning that all the commands speed and delay depend on the host network bandwidth.
- aledalgrande 6y agoOMG Tekken 3 and JoJo's :O I love whoever made this!
- gfalcao 6y agoTekken 3 <3
- justicezyx 6y agoWho are the developer of this? This looks like a great service to people who want to try out the old game that they have been playing when they were young. For example, I always have a urge to play the old civ3. But it was always a hassle to start a Windows machine and open steam and launch the game.
- lxe 6y agoWhy WebRTC? How heavy are the commands that are being shared?
- sktrdie 6y agoLegalities? You don’t want the server that relays commands for copyrighted games to go offline. With WebRTC there’s no servers :)
- gfalcao 6y agoTekken 3 nostalgia
- framp 6y agoThis is very neat but gamepad mapping can't be configured and the browser default "standard" mapping doesn't work very well (at least with my Xbox one controller). If you visit chrome://flags you can enable "Restrict gamepad access" which will disable the default controller's mapping. Incidentally, I recently wrote a small crossplatform gamepad mapper you can use: https://github.com/framp/joystick-mapper/releases/tag/0.3.0 https://github.com/framp/joystick-mapper/releases/tag/0.3.0 Configuration for psxparty here: https://github.com/framp/joystick-mapper/blob/master/examples/kosmi-psxparty.conf https://github.com/framp/joystick-mapper/blob/master/example...
- Scaless 6y ago>gamepad mapping can't be configured Click the wrench next to controller 1/2, click in each of the input boxes and press the button on the controller to map it. I had no issues setting up my XB1 controller.
- jokethrowaway 6y agoI tried that but it's just returning GMB016 for whatever key I press
- hellojason 6y agoOn Windows, I was able to get gamepad mapping to work via JoyToKey[0]. [0] https://joytokey.net/en/ https://joytokey.net/en/
- remram 6y agoDoes it stream video, draw commands, or emulator state?
- singhrac 6y agoEmulators are very impressive! The biggest innovation here is running the emulator in browser (presumably a WASM cross-compilation of an existing desktop emulator?). Dolphin has had a similar (non-browser) feature called Netplay for many years, and it works incredibly well.
- deleted 6y ago[deleted]
- phreack 6y agoHah, a friend did the same thing a while ago for NES. [1] I think this is the most amusing use of WebRTC I've found, and it's amazing. Kudos! [1] https://rodri042.github.io/nestation https://rodri042.github.io/nestation
- germanka 6y agoA way to bring back my memories...
- stanko123 6y agohauxir, nice job! how is P2P implemented? I see mediasoup-client SDK in use, but that does not support P2P. How many participants are supported by the app? WebRTC requires to re-encode each video stream, so there is a CPU limit for how many peers one can talk to. I noticed there is some kind of latency in ms next to each participant. How is that measured - time to the next peer or time to the presenter?
- arvinsim 6y agoIs there a way to cache games?
- plumeria 6y agoWhy does it stall in "Initializing..."?
- fxtentacle 6y agoAs someone working on real time streaming, I find this both interesting and impressive, but I also cannot shake the feeling that WebRTC will be too slow for most games. At least in my experience, WebRTC even when using UDP was a lot slower than custom protocols, mostly because it responds badly to packet loss. If I use plain UDP in c++, I can layer on forward error correction like Solomon Reed and just ignore lost packets up to a percentage. That, alongside with low level control of the transmission timings seems to be the difference between 60ms peak latency with WebRTC and 5-8ms in C++. Or noticeable input lag @60fps vs. exactly one frame.
- felipellrocha 6y agoHow would webrtc impact anything? It’s literally a udp socket with a couple of protocols built on top of it
- fxtentacle 6y agoYes, those protocols make a huge difference. Also, high throughput low loss UDP relies on ms-level timing control, which is all but impossible in Javascript.
- rtb 6y agoAmazing. Needs multitap support for more than two players!