Mod Deployment
I have been thinking about how to get Mods / Maps / Models / Sounds to clients.
At first I considered how HL, TF2, et al. But a large problem is that maps change and final versions are never ever final.
Then I considered the L4D series and thought how I never play mods because I don't want to go download them only to find the game has ended by the time I come back.
Lastly I realized that I have never had these problems with Garrys Mod. Doing research I found that it appears to use hashing of files to keep different files separate. It also redownloads all the lua (in a single compressed bundle) since it is so small. This would allow for a very transparent experience for the user. Combined with automatic pruning, directories shouldn't grow too large.
HTTP downloading is a must, but should not be required. And for when not used, the throttling for downloads should be controllable. Trickle downloads in NS1 were painful.
As an unimportant side note, you should give an eta for the downloads overall.
At first I considered how HL, TF2, et al. But a large problem is that maps change and final versions are never ever final.
Then I considered the L4D series and thought how I never play mods because I don't want to go download them only to find the game has ended by the time I come back.
Lastly I realized that I have never had these problems with Garrys Mod. Doing research I found that it appears to use hashing of files to keep different files separate. It also redownloads all the lua (in a single compressed bundle) since it is so small. This would allow for a very transparent experience for the user. Combined with automatic pruning, directories shouldn't grow too large.
HTTP downloading is a must, but should not be required. And for when not used, the throttling for downloads should be controllable. Trickle downloads in NS1 were painful.
As an unimportant side note, you should give an eta for the downloads overall.
Comments
Otherwise you could just have the server being the only source.
Or perhaps you could have it so that a direct URL is given to download it (similar to what Alien Swarm and I guess other Valve games implement) - perhaps have it as "standard" modding protocol? As part of the actual file, there'll be some "header" information with this URL.
Adding to Deathbob's sidenote: Not just an ETA, but also size (total), size (current), file # / files total, and download speed. Pretty much the standard things.
Those standard things also seem to be missing from a lot of games.
This is true, unfortunately. But not always - game patchers/updaters generally have most of that 'standard' information available, but perhaps not currentfile name, or currentfile size. Just depends on the game. However, these games don't have that information when downloading custom content from a custom server (or it's simply not applicable). Honestly I don't really think there's an excuse not to show this info, except perhaps clutter (too MUCH information): Currentfile size may be unnecessary (if you're given the total file size); currentfile name as well - but at least you'd be able to see what it is you're downloading, unless the custom content is just terribly named.
fsfod (on irc) pointed out that there may be problems with leaving the client open all the time (which would be necessary). Throttling becomes big and it may be worth only unchoking one at a time when playing.
I don't like the idea of bit-torrent for games as a number of players probably wouldn't realize it was enabled and would complain about lag (especially when people are shaped) and how NS2 chewed through their bandwidth allowances etc.
KISS:
Large Mods should be external downloads.
Small Mods depending on what has changes should be download-able off the server or via HTTP.
Maps should be download-able via the server (If it has been allowed) with optional bandwidth throttling variables to allocate how much total bandwidth off the server can be used for direct downloads. Otherwise they should be directed to a HTTP server which could either house the normal map files or a compressed version.
i.e. basically how map downloading works currently with some slight tweaks as others mentioned, the trickle system was painfully slow, however I believe it was done to stop consuming all the server bandwidth and causing players in-game to lag.
Personally I don't mind helping a fellow player download some stuff faster for the server I'm playing on, but I don't want to be host to every joe ns player out there.
And just like in gmod it should be possible to tell server to not upload at all or with a certain max speed/size. Aswell as clients can set if they want to allow downloading from server.
FastDownloadUrl is also a good thing, which would be good if it was possible for servers to set.
If the server turn off uploading it may instead upload the files to a svn or fileshare site, where clients can dl from. However, in such cases it would be awesome if the server could send a short string to the client like "content is at www.content.com".
While speaking about sending data before the real dl starts, it would be nice if you could upload a txt and maybe small lua script to the client, then initalize it, before the other stuff start upload, making not only messages possible. One use for this could be that with a sql module you could make client during download connect to a database and that way let him/her chat even though still joining.
Ahh I guess I just thought global automatically, then everything I read catered to that. :)
Regardless of if the clients opt out or not, you'll get the same 'normal' experience of getting the files from the server. But if players have it enabled, you get a boost. I don't see why it shouldn't be implemented. Additionally, someone posted about the client needing to be online all the time? I don't think that is true. It can be notified that someone is connecting and it needs to be turned on. The server can then notify the client that there are no more people waiting for content and it can shut off.
I think this is a really cool idea.
but imo i would like it so that servers could simply allow it, force it or not use it at all.
Yeah I agree. I didn't understand it when I first read that, actually, but I suppose it makes sense from a 'global tracker' perspective?
Alternatively, as this can be quite tricky to implement, it could be possible to specify your connection speed in a menu - by default the bittorrent max connections and stream rate could be set quite low so as not to cause problems on most Cable/DSL lines.