Hi,
Please bear with me - this is a somewhat involved topic with a very narrow target audience. Still, maybe worthwhile.
In the past, and even currently, "novice" module builders that want to collaboratively create a module/persistent world, various mechanisms are being used, in increasing degree of sophisticationcomplication and brittleness:
* Just send around the .mod to everyone that wants to make edits, thus ensuring no conflicting edits are being made. Then deploying that .mod on a server somewhere, with various degrees of hackery involved (in order to get NWNX running, if it's even used). No actual edit history is being kept (other than maybe backups of old .mod files, with no real structure or forced schedule), and edits frequently break or get lost.
* Using a central repository, like svn or git, using it as backend/storage, while still building and deploying manually.
* The same as above, but having a build/tool chain serverside that auto-builds the module on each commit & deploys it (like CI) - just requiring a server restart to see the newest edits. Maybe have nwnx_resman auto-load some resources on the fly.
After running a PW for about 10-ish years (wow, not sure if that's something I want advertised), I've been using the third option for a while now. I'm really not happy with it though. While it's very robust in terms of controllability (what goes into the module, making sure it's all in order with commit hooks and a big cauldron of custom import scripts), it's way too much manual overhead and work for the maintainer (read: me).
So, I've been thinking on improving collaborative editing on a module level, while not losing the advantage of source control and automatic deployment of changes. While I already have a proof of concept tool up and running, it's nowhere complete. Before actually showing it, I'd like to describe in general terms how it works, and actually get some thoughts and feedback on the usefullness on it; and maybe on usecases that I overlooked.
Right now, it mainly consists of two parts: A JSON api (
http://i.imgur.com/GYsmAvZ.png), and a user-facing frontend website
(http://i.imgur.com/WNYbVUF.png). The eventual end-target is obviously to have a docker-deployable (think VM) that can be run on any host and would allow boostraping a new PW with nwserver + NWNX with zero configuration or management overhead. However, that's the future.
The general workflow of contributing right now looks like this:
* Get authenticated by the project/repository owner
* Get the latest module via a one-click download, open it in your standard toolset and make your edits
* Enter a commit message
* Depending on the content and what requisites it has, the backend deploys your changes live to your running server environ in a consistent (non-partial) state (with some help by nwnx_redis, nwnx_resman and nwnx_areas). Again, stuff can be mangled before entering the game world:
https://gist.github....e-export-coffee. The basic idea is to move resources OUT of the .mod file (only keeping the bare essentials for a empty module inside) and load everything at runtime from resman.
On the storage side, all changes are kept in a (json-formatted) git repository, which can be auto-pushed to other services like Github (or just backed up regularily by yourself), and in theory edited from the "outside" too.
As you can see:
* It's VERY basic for now, and definitely targeting developers that don't want to fuss with any kind of overhead, but still want fairly good auditing and control.
* It doesn't care about custom content or hak dependencies.
* Obviously, it doesn't do any kind of scripting support yet.
* It doesn't have any kind of locking helpers yet - concurrent edits of the same file will be troublesome, since there is no manual merging (yet).
If you stuck around and read all that blathering, what are your thoughts?
What is YOUR workflow for developing NWN1 or 2 stuff, and what would you wish were different? Any feedback would be hugely appreciated.
n