Streaming Game Content over TCP/IP: A Discussion

Started by
18 comments, last by dizzydog 19 years, 8 months ago
I guess my target would have to be commercial games running on windows written in c/c++. Thankfully this is almost all commercial games ;)
Advertisement
This may or may not be OffTopic..

and it may even hurt performance a little.. but would developing a virtual machine and running the downloaded binary inside it work ??

Yeah.. it may be.. as we say .. going around the elbow to get to the thumb... but it would allow such neat tricks as saying that we have a CD in the drive when we actually don't.. and so on.

Just my opinion.

A.R.
I've contemplated such a thing before as well, but have not yet hammered out the dynamics of such a beast :D
It's not "too" bad, but this is probably the easiest option under the conditions you've mentioned. Take a look at a sourceforge project ext2fsd: http://sourceforge.net/projects/ext2fsd/

Basically you want to create a filesystem driver that forwards all requests to a network server.
From a file system perspective, it's not a complicated problem. The trickiest part would be ensuring that your environment was prepared to run the files once you had them. By that I mean that most windows apps nowadays won't run without the correct registry entries. You could easily include these with your package in a registry file that gets imported prior to execution. You've also got to ensure that any dependencies have been met (DirectX, OpenGL, etc.)

There's a couple resources I know of that might help you research this. Gentoo (linux) has a really nice distribution system which uses rsync to distribute a large collection of packages which can then be automatically compiled and installed. It handles dependencies and environment changes fairly well. But of course, it's linux so it's not "exactly" what you're looking for.

Another very interesting read is this article on a project called Zero Install. Again, it's linux, but it might give you some ideas.
Using the method of overriding file i/o and registry API calls to control how the game gets it's data, what would I have to do to circumvent the cd protection most commercial games have? I'm not asking for a way to pirate or crack anything, but this is an issue. Any thoughts?
This would be super-easy to do at the filesystem level by running a file-wrapper that simply treats all content as internet-based and caches things locally. So you simply treat it all as if it were on your own computer, and its just that some file requests have long wait times.

Depending on how fast and often the game requests files or directories, you could be able to have the golden "fetch files only as needed at the beginning of each map" or a horrible "wait in the middle of the game while I load texture X" or a pointless "the whole game is fetched at first launch, wait till that's done, then play".

Really, you need access to the client for this to be feasible.
-- Single player is masturbation.
One thing I just remembered that is making things difficult is that the fopen/read/close/etc functions are all in the runtime :F If the runtime doesn't even show up as a module being used by the application, how can I override the pointers to those functions with my own?
Questions about overriding specific functions should go in the General Programming forum, methinks. If it stays too far off networking, the thread may be closed.

enum Bool { True, False, FileNotFound };
It's sounds a bit like you're trying to recreate the games on demand stuff that some companies are offering. They stream parts of the game to you before you start, then once you start playing they stream the rest to you in the background either on an as-needed basis, or just a continuous trickle. Examples of folks doing this are:

www.atariondemand.com
gamesondemand.yahoo.com
www.rcninteraction.com
www.comcast.net/gamesondemand/

I dunno about the details of how they schedule the downloads or anything, but if you start with those and dig around you might be able to find some info.

This topic is closed to new replies.

Advertisement