Well, in-progress is a misnomer. Right now, a lot of the base foundation is complete - there's still some bugs, and some things that would be useful to have aren't in. (Getting at global scripting variables in the code and getting at scripting return values in a non-hackish manner come to mind) Past the initial figuring-out phase, I haven't really felt motivated at all to get it done. I haven't finalized how, exactly, I'd like to deal with the interface, but that's probably not going to take very much time if I'm interested in doing it.
Part of the problem with the HUD is that it's so hard-coded, anything that I do within the current system will have nowhere near the potential as if I just completely skip it and use a user-defined HUD. Compared to the other parts of the code, the HUD is really simple because it just has to show in-game variables in a pretty form. Excepting the radar, of course.
As of now, hud_gauges.tbl does support per-ship HUD settings but it supports very few gauges - the middle shield icon, the two hull/shield status indicators on the bottom, the escort list, and the afterburner/weapons gauges.
So, blah blah blah. If the scripting-HUD stuff were implemented you could do something like this, regardless of the actual table form:
if ship.getSpecies() == "Shivan" then
--Put Shivan HUD stuff here
else
--Put GTVA HUD stuff here
End
My preliminary thinking on the actual table format was to arrange everything using the Lab GUI stuff, with a new "HUD" object. The code would then use the built-in "Screen" support to arrange collections of each HUD gauge object. Then on a ship, you would choose which Screen that ship would use. The only problem with that method is that the GUI is set up to mostly let a user modify stuff, rather than create it, and support for that would have to be added in interface.tbl if I were going to use the built-in style customization system. But, I don't think it'd be a good idea to link it into interface.tbl.
And actually, I think the best course for the new HUD system would be to essentially make it bypass the default FS2 GUI and be based completely on scripting. That would make the GUI useful, esp. considering that it's outdated with taylor's GUI editor and separate system so there's not any point to continuing development on the system in the direction planned.
Anyway, say some kind of hackish solution...hmm...what you could do - this would be extremely hackish - would be to have an extra table and trigger in the code. When the HUD bitmaps loading phase starts, the code would check the ship species and then go to whatever section in the new table corresponded to that species. In that section of code, you'd have the name of the original file, then the name of the replacement file. These names would be replaced on every use by the proper species one by the core file system.
Other downsides: Extremely minor slowdown in all loading times (Being pessimistic, I'd say a second per mission load. A conditional doesn't take very long to check.). If you viewed from other ships, the HUD would be the same as the player ship's species. Probably more.