New content management system ???

One of the things I hated about XNA when it came out was the content management system.
I thought they got it totally wrong.

I understood why they did it the way they did, but it was like a lot of things in XNA, it was designed for target management reasons rather than game design reasons.

What I wanted was a tool chain that could compile content into a sensible binary format outside of the compile phase. Then in game you have a manager that attaches to file systems.

The file system could be a disk file system, zip file system, or a network file system.

That would give you the ability to ship a game with a bunch of zip files containing compiled content, then patch these files at any time.

Why do I think this is a good idea.

  • Content loading

In general these days , disk access is slower than the processing of the data. Loading a zipped file then processing it is usually faster than loading an uncompressed file and processing it.

  • Content release management

You can just release a new version of the zip file whenever you want. Full version history in one hit.

  • Content organisation

You can have a zip file per level, or release add ons as zips.

  • Modding

Since we are just talking about zip files, they can be modded by anyone. If you don’t want to allow mods, then password protect the zips.

  • Updates

You could mount a network file system and check the file dates against what you have locally and very simply update the local copy. (I know this isn’t the only way to do this, but to me it makes sense to have everything in a single place)

  • Debugging

You can get the same version of everything to chase a bug as long as you keep a version history of all the zips


Do you agree with me?
Do you want it?

If enough of you are interested, I will add it to my engine and release it as a MonoGame plugin, but only if enough of you are interested.

I have more than enough work to do on my own projects so will only invest the time into this if it will be valued.

Let me know what you think.

I started the basis for a slightly more comprehensive content management system, at least in terms of loadtime. I made a few subclasses of ContentManager, ones that will load from a relative file system path, or an embedded resource, or a data file, and then another that contains any combination of these in a prioritised order. That way, my game can request an asset by name, and it will look through all of these sources and return the first match. (This is useful if you want to allow users to override the default assets with their own local files, etc.)
I also made a system of separate content managers for each object type, so as to be able to unload anything that will not be needed for the next level whilst retaining those that are, etc.