Glad you're finding this useful! I've actually made some serious progress in the last couple days, and I'm glad to say I've almost fully decoded both the briefing and camp files! Rather than keep posting them in this thread, I'll just upload my docs elsewhere so I can update them more easily.
http://srange.net/wc1/briefing/briefing_format.txt
http://srange.net/wc1/camp/camp_format.txt
And while this code isn't at all polished, it IS functional, and may be instructive. You'll need Python to run anything, and it accepts no command line arguments, everything is set up directly in code.
http://srange.net/wc1/camp/block_expander.py
http://srange.net/wc1/briefing/block_expander.py
http://srange.net/wc1/briefing/brief_expander.py
There's still one two-byte value for each briefing screen that I don't understand the purpose of, and four one-byte values for each mission in the camp file. They don't relate to things in any way I've identified. It may be something to do with cutscene triggers, or making Halcyon happy in your debriefing, but I'm not sure. I haven't fully quantified some branching conditions that I think are based on how much damage you took during the mission. My code doesn't seem to read one SM1 mission correctly. And I haven't looked at all at the funerals, medal ceremonies, or Halcyon office scenes, beyond knowing they're there. Other than that, I seem to have full control of briefing background, character, facial expressions, timing, speech, text, and branching, as well as of who shows up in the bar, the mission tree, medals, and how many points each mission objective is worth.
I've learned a few interesting things. Some missions are designed such that you would get a medal if you killed more enemy ships than are actually present in the mission. Sometimes the margin is just a few kill points, but sometimes it's several hundred. Many missions would award medals for 2000 KP, which would be several dozen kills, even though there's nowhere near that many enemies in any mission. That would make more sense if there wasn't a flag for "no medal of any kind". Another odd thing is with the variables that can be inserted into conversations, like your rank and callsign. $N inserts your name, but so does $P. $P is never used in any briefing file, though. I'm wondering if part of the engine wasn't originally designed to let you have a first name.
My current plan is to write a set of functions to decode and reencode all the data files, of every format. I've mostly got the camp and briefing files done, and the graphics files shouldn't be too much trouble since HCl (I'm pretty sure that's an "L" not a "1", right?) kindly documented the format so well. I expect the same with missions. About the only major format that isn't documented is the saved games. I don't know if I'll go to the trouble to put a pretty interface on my code. I do have grand visions of a single program that would allow you to edit all that is editable, but that would be somewhere down the line.