pcsx2 splitscreen over the internet?
#1
Hey,

i'm just curious if it is somehow possible to play games like FF9, Baldurs Gate, Champions of Norrath and similiar together over the internet? I'd love to play it with a friend of mine. But he's living far away so yeah, is it possible to play together on 1 pcsx2 emulator over the internet? I just need to get control over one of his USB ports or something.

Maybe with something like hamachi? it would be absolutely awesome to somehow manage to get it working like that.

Maybe one of you guys tried something similiar once. I'd appreciate any advice!
Reply

Sponsored links

#2
(04-07-2013, 04:32 PM)Akizow Wrote: Hey,

i'm just curious if it is somehow possible to play games like FF9, Baldurs Gate, Champions of Norrath and similiar together over the internet? I'd love to play it with a friend of mine. But he's living far away so yeah, is it possible to play together on 1 pcsx2 emulator over the internet? I just need to get control over one of his USB ports or something.

Maybe with something like hamachi? it would be absolutely awesome to somehow manage to get it working like that.

Maybe one of you guys tried something similiar once. I'd appreciate any advice!

Currently there is no support for anything like that. Any games that have online servers that are still online (network multiplayer versus splitscren) MAY work with the dev9 plugin, but it's still fairly buggy.

The problem would be keeping the systems synced. Besides PCSX2 being far more complex than nearly every other console emulator out there, it also requires massively powerful machines just to keep a single machine going full speed. To have to take network code into consideration, sudden speed spikes (up or down) due to menus or too many characters on screen, etc that will effect different machines very differently would be a huge undertaking.

Both machines would have to spend a very large portion of the time just making sure the memory contents were the same, you'd be dealing with fairly large packets and any time such a desync occured (which again, given the complexity of the system, would likely be a huge problem given standard internet latency) there aren't too many solutions available.

The only real "Fix" would likely be to use savestates, meaning the host PC would have to pause and send an 8-14MB file to the "client", even with a fast connection that could be anywhere from a few seconds to a couple minutes (doesn't help that most peoples downloads are usually much higher than their uploads).

In short, it'd be an absolute nightmare Smile I definitely wouldn't envy anyone who'd try and take up the task, but undoubtedly someone will at least try it at some point.
[Image: 2748844.png]
Reply
#3
Well, it'd be certainly possible to implement..

Would need some kind of system where PCSX2 can connect to another running instance of PCSX2 on another computer, and obtain a copy of the image that running game is rendering to the window/screen. Then pass all the game control inputs received on from the client to the host, for the host to interpret as a second controller.

[ Host ]
(Game running here )
(Send copy of rendered game screen to connecting client)
| ^
| |
| |
v|
(Transmit every game input control to host)
(No game running here, just showing images sent by host)
[ Client ]

It is technically possible, but would require a fair bit of programming to achieve it.

Not to mention, there would be considerable lag, as it would be transmitting an image over the internet, depending on how far away the person is the lag could be unacceptable. If it was just say, one city to the next, that would be fine, but a connection from say USA, to Australia, would just never work.

Would need to investigate ways of compressing and quickly streaming real time images as fast as possible. Not just for quality, but minimal delay in the actual transmission of the images. A handy feature would be a way of defining which part of the image being rendered on screen gets transmitted too, if it's split screen sending both sides of the screen would be useless if you only need to get one half of it.

I don't know, I guess there's no reason why it couldn't be done, but I imagine the results would be something similar to the experience one would have of playing a video game through remote desktop software (considered trying this? Teamviewer comes to mind). It would be technically possible, but the experience could be so laggy that it probably wouldn't be very enjoyable. Would work fine though regardless of lag for turn based games
A nerd, gamer (PC/PS/Emulators), hobby programmer (Java) learning OpenGL programming (4.2+), and professional 3D artist (Blender). Here to share experiences using PCSX2, report issues, thank the developers for their awesome work and contribute to any technical discussions I have input for.
Reply
#4
Ain't there already some 2-player-over-the-internet methods for SNES and PSX?

Also, maybe instead of sending the entire render to the client, the host could just send the GS commands and the client's GSdx plugin would render the image. Skipping frames if necessary to keep up with the incomming data.
[Image: nbKSK.jpg]
Reply
#5
That's a thought, just send the drawing commands. But, those drawing commands would use texture data stored in the virtual memory of the host, so then you'd need to be syncing the virtual memory between the two, and it could be changing regularly, possibly loading and unloading stuff from the 'disc', or creating graphics on the fly. Syncing that could be a nightmare.

Plus I totally forgot sound, but that would be pretty easy to do, just stream the audio. Any decently compressed format would do.

I think the only options would be either syncing the virtual graphics memory and stuff of the two running PCSX2 applications and having like KrossX said, just the client doing the drawing commands, or sending a reasonably low resolution and compressed image about 20-30 times a second somehow. Both have problems though. I would only go with just sending the raw images for each frame because to me that seems a lot easier from a programming point of view. Trying to sync memory and send drawing commands could be more efficient if perfected, but if it fails it could end up with horrible drawing problems.
A nerd, gamer (PC/PS/Emulators), hobby programmer (Java) learning OpenGL programming (4.2+), and professional 3D artist (Blender). Here to share experiences using PCSX2, report issues, thank the developers for their awesome work and contribute to any technical discussions I have input for.
Reply
#6
There's already the GSsnap thing that take a frame(s) of gs commands and memory. So I was thinking in packs of gs frame commands and memory transfer packs. A CRC check could be done to check the memory in sync and perhaps tile it so the client could request a region update instead of the entire thing.

Or with a magical new texture cache, there could be a stream of textures for the client to use instead. Then slow network times would make every PS2 game look like using the Unreal Engine with lots of texture pop-in. Tongue

Now on-topic! Sorry, I dunno of any Kaillera thing for PCSX2. =S
[Image: nbKSK.jpg]
Reply
#7
That's definitely a cool idea.

Someone should take note of this!

What about geometry/vertexes/triangles though of the 3D objects in the scene? Are they stored in buffers/display lists/etc or just RAM? Are they resent with the gs commands every frame or are they just stored somewhere and called upon with the gs commands? If they are, that's good, it's just another piece of memory to keep in sync, if not though that could be a problem if every frame has 10,000 or so polygons of data being sent with it.

Would need to ensure that updates to notify if the texture cache has changed (image added/edited/removed) are processed in order with the frames too on the client receiving the batches of gs commands. Even if the update only places a placeholder image in the specified location of memory to download chunks of the texture later, would need something so that when the gs commands are processed there is image data there. Could use TCP, would be slightly slower but it would ensure the updates both arrive and arrive in the correct order.

Only fear would be for games that recreate some textures every frame, for example shadow maps, that's texture data changing every frame. But if that can be described as a gs command, then it shouldn't be a problem either, but if it can't then every frame the texture cache would be out of date and need updates.

I don't know, if it worked and the texture data could be synced effectively, and the geometry data, and the dynamically recreated textures are all being created using gs commands that are transferred with each frame, then it should work in theory! It would certainly have one advantage over my idea, the client on the receiving end could be rendering the frames at a much higher resolution and quality than the PCSX2 emulator it's receiving the commands from, and that's pretty cool.

If it was me though, I'd take the lazy route and just create some system that compresses image data into a stream of some kind (like how webcam streaming works) and send that, along with some audio. And on the client just have it displaying that video stream and playing the audio, with inputs being passed to the host. It seems a lot simpler to implement, but it would mean more bandwidth likely and ofcourse the person on the client end would be limited in the resolution/quality they could receive (can forget getting 1080p resolution, though could render at a higher resolution and shrink down to a lower resolution, at least giving the client a low resolution AA'd image).


ANYWHO, Back on topic..

OP, As far as I know, PCSX2 has nothing built into it which would allow you to do what you want to do, but you could roll your own solution. Google 'USB over TCP', you could have a USB gamepad or keyboard or something-something sending input commands from your computer to his over the internet with some special software. So then all you'd need is just basically an audio and video stream of what's on his computer screen being sent to yours. Hell, maybe UStream or something would work? As long as the delay isn't too bad, and the gameplay isn't fast paced, it shouldn't be a problem if he's willing to accept your responses might have a half second delay or something.

PS: If it works, be sure to post it here, I'm curious!
A nerd, gamer (PC/PS/Emulators), hobby programmer (Java) learning OpenGL programming (4.2+), and professional 3D artist (Blender). Here to share experiences using PCSX2, report issues, thank the developers for their awesome work and contribute to any technical discussions I have input for.
Reply
#8
You're over thinking it I... think. XD

Most of what you mentioned already goes on the command packets. And only certain transfers would require a memory pack to be sent. Remember that the GS is hardware, not a rendering engine. And yes, order is crucial.

On the good side of video streaming though, is that it could be directly sent in interlaced mode. Then the client could deinterlace using DXVA for awesome vector HW deinterlacing. Heck, even use motion interpolation filters to get super smooth gaming. =D
[Image: nbKSK.jpg]
Reply
#9
(04-09-2013, 07:40 PM)mindinsomnia Wrote: ANYWHO, Back on topic..

OP, As far as I know, PCSX2 has nothing built into it which would allow you to do what you want to do, but you could roll your own solution. Google 'USB over TCP', you could have a USB gamepad or keyboard or something-something sending input commands from your computer to his over the internet with some special software. So then all you'd need is just basically an audio and video stream of what's on his computer screen being sent to yours. Hell, maybe UStream or something would work? As long as the delay isn't too bad, and the gameplay isn't fast paced, it shouldn't be a problem if he's willing to accept your responses might have a half second delay or something.

PS: If it works, be sure to post it here, I'm curious!

I'm working on it, thanks!
Reply
#10
This is interesting. Video/audio streaming should work reasonably well IMO for games which don't depend on quick response time (like some puzzle games, possibly some RPGs, etc). This would also be iMO the most straight-forward and simple-to-use-approach (e.g. share window/audio using skype or some other screen sharing application).

The other part of this would be to forward controller inputs from the remote system to the local "host" PCSX2. This could be an interesting project for lilypad or other pad plugins: use a controller over the network. It's definitely not impossible...
Reply




Users browsing this thread: 1 Guest(s)