I do this all the time. The key is to convert the module to a revision control system friendly format.
Here's a summary of how I do that. I use linux for all of this.
- erf program (one which builds and runs on Linux... I don't have the link handy).
- Elven's nwn ruby tools - converting gff files to text based yml and back.
- External compiler nwnnsscomp - I use the latest version I could find from the old nwn-tools package, with a few fixes to make it look for the 1.69 include files.
- A checked in read-only tree of all the base scripts for the expansions - this is so that I don't have to have all the bif files around.
- A few shell scripts to pull it all together.
- Git (some other source control would be fine, but git is the best I've found. CVS can't handle symlinks which is important to my process).
I don't keep the built module around so I haven't bothered with a depdency checking build process. Each time you build a module it does
everything. So for each module I make a little wrapper script for pulling and pushing the module. E.g. push_appear.sh, pull_appear.sh
I use git which handles symlinks nicely so I have all the non-module specific things linked into a common place (items, scripts, placeables etc). This way I can build an work on a subsystem module (like body tailor for example) and when I pull the changes back in any scripts or common gff things that were changed get changed in the common place automatically and all other modules which use those files get the changes. I find this very convenient.
To build the appearance module you do push_appear.sh which:
-rsyncs ths files to a tmp directory (this turns the links into real files)
-compiles all the scripts
-converts all the yml files back to gff files
-erf the tmp directory into the appropriate .mod file into the staging directory (name of mod is specified in the wrapper script, staging dir is global but configurable).
You can now play the mod directly, or pull it into the toolset and do things you can only do there etc.
When done put the mod file back in to the staging area (if not nwn/modules/ already). Then do pull_appear.sh which
-creates a tmp dir and un-erfs the module files into it.
- removes ncs files
- converts all gff files to yml format (with a filter wich reduces the precision of position floats to 4 decimal places so that the don't change every time).
- copies all these files in to the specified module's source control directory (things that are links get followed so the changes go into the master copy.
Now you can use your source control to view the changes and commit them etc.
I keep all my hak files in there to. A slightly different process since there are no scripts and you don't tend to build them as often. But in general it's the same idea.
You can then use text processing tools to make changes to things as needed. Renumber parts, fix pallete things etc. I don't do much with
dlg files in yml format because they are really hard to hand edit beyond simple type fixes or script name changes. You can run speakeasy wine pretty well. I use zldg for all of my generic or system (i.e. tailor, moneychanging, etc) dialogs anyway so that's all just scripting.
I do everything I can in linux. All my scripting except small changes during debugging etc. The text editor in the toolset is unusable for any real programming. Anyway, a lot of words to say that, yes, it's certainly possible '>