*Begin long [and slightly embelished] story*
I just realized some mistake I made years ago. Way back when we were getting the first working mission SDK built, we ripped the the exports from Outpost2.exe and made a header file for them. I had an automated tool that read all the exports, undecorated them into proper C++, cleaned it up slightly, sorted all the functions alphabetically to group related ones nicely, and then output a big header file. That header file was then further cleaned up by hand, organized a little, and many variable names were added so we could remember what the parameters to functions meant. That original header file was however split into two, one of which became Outpost2DLL.h which was the basis for the SDK, which was then later split into the many smaller header files in the current version.
The other header file was Outpost2App.h. I believe it was initially included with an early version of the SDK, but was left rather unnoticed, and was fairly quickly removed before anyone really started to download it. The main reason that it was split, and eventually removed was that it's contents had nothing to do with creating new levels, which the SDK was primarily concerned with. There were also some stability issues, in that we never really managed to use many of the classes without it crashing. [and maybe we thought it'd be kinda cool to keep this our little secret
]
Aside from a little initial tinkering, it was mostly forgotten about for a long while. At least until Eddy came to us with a startling realization that Outpost2.exe contained more exports than we had in the SDK. Remembering about the "other" header file, we quickly sent it to him [to shut him up?
], with the usual "yeah, we knew about it all along". Then after some more unsuccessful thinkering, it was largely forgotten about again. [Well, Maybe Eddy made some use of it, I don't really know, and Hacker does have some stuff for in game menus and such, which is somewhat related, although I don't know how strongly to the header file].
Anyways, I was reminded of this forgotten header file once again. [Largely stemming from McShay's request to know more about DescBlockEx, which lead me to some code that used what I soon found out was a GameStartInfo struct, which is passed around by a few functions by the classes in this other header file.] This time while digging around in some code, and tracking a few virtual function calls with the header file open for reference, a slow realization came to me about why we never got anything really working with those classes before.
When the compiler compiles a class with virtual functions, it adds them to the virtual function table in the order in which they appear. ... slowly remembering back to so many years ago, that header file was sorted alphabetically. The ordering of those functions in the virtual function table is not alphabetic. So when the compiler processed the header file, it's virtual function tables were different from those in Outpost2.exe. Thus any calls from our code to a virtual member function would go to the wrong function [using the wrong ordering from our compile, but the correct table from Outpost2.exe]. It never occured to me that it might matter back then, since the addresses of all those functions was exported by the exe, but as long as they were declared virtual in the class, all function calls had to go through the virtual function table. If the virtual modifier was removed, then it'd probably change the name decoration, and the code wouldn't link right due to missing symbols, but if otherwise corrected, would actually have gone to the correct address. Basically, it's all to do with inheritance, and making sure that any calls on that class, or a derived class, go to the member of the right class in that class hierarchy.
So, long story short, I went through the tables in the exe, and moved the declarations around to match up. Hopefully they're in the right order now. There are however 5 missing virtual functions on TFrame. They were pure virtual, and thus had no functions to export. Hence ripping the exports from the exe didn't pick up on these. I just left a note by that class, and marked where the 5 functions should go. Until someone fills those in, that class shouldn't really be used. [I might get around to it later, or I might just forget about the file for a few more years.
]
Anyways, here's an updated copy of the "forgotten" header file attached.
[Feel free to add to, or correct the story. It's been many years and I've forgotten many details about the forgotten header while, which may have not been so forgotten to other forgotten, or not so forgotten people.]