Well i've held onto the merging program long enough and not really changed anything. It seems to work fine but if somebody else wants to test it you can grab it
here. Program written in c# and will require .net framework 3 (or higher) to run. Fields are all self explanatory, but for best results put all the map contributions (in sub-folders) in the same directory - the program will then traverse all the subdirectories looking for "global.hps" "inventory.hps" and "*.lang" to merge into a destination folder with names "global.hps" "invetory.hps" and "extra_english.lang".
It will notify you of any naming conflicts, parse errors (or at least should do!) and function signature collisions (which it will attempt to auto-resolve - note that it will NOT fix naming conflicts in the same hps file but will still manage to report them (probably), as it assumes the files actually work).
Note that if you are loading in huge language files (i.e. >3 meg) it will appear to stop responding whilst the file is read in - it hasn't crashed, so just leave it be; most lang files are no where near this big (The main game's
english files total <200kb!), and the program still works fine there is really no point me addressing this by adding threads - it is totally overkill.