
There's just one funny thing about this main hall.
It's not done with the code. It doesn't require any extra media other than a table. (Although MediaVPs are definitely recommended.
It's done entirely via scripting.

The basic concept is based on a title screen idea I had for Ferrium; the only big difference is that I replaced a planet in the lower-left with the ship model, because I could only get the drawMonochromeImage() function working in a way that would let me use the upper-right portion of a planet in the lower-left of the screen. (FYI, the aabitmap function is what the HUD uses to draw its graphics.)
If you take a closer look at the table you'll see this:
#State Hooks
$State: GS_STATE_MAIN_MENU
...
#End
What I've done is I've enabled you to link into any Freespace state (Read: room, like the techroom, or the ready room) and have it execute whatever's in the $Hook: variable rather than what's on the room.
You can also use the setEvent() command to change to a different room/state. This is how I made the buttons work for the Mainhall. Using getEventTypeName() and getNumEventTypes() you can with a for loop, you can get a list of all events you can switch to. For states, look up code/gamesequence/gamesequence.h in CVS.
The ship model is done with an easy-to-use render function that's part of the shipclass object. So, all you need to render a 640x480 GTF Hercules in the upper-left corner is add the following lines to any hook
ship = tb.getShipClass("GTF Hercules")
ship:renderTechModel(0, 0, 640, 480, false)
I've provided three extra arguments that let you turn the ship any which way you choose; you have to rotate it manually using the bs.getFrametime() function (See my scripting.tbl).
Variables by default are persistent between frames. So if you set a variable called "my_dog", the value will still be there the next time that a hook is run. It will also be available to any other hook.
There are a number of functions that I didn't use in the mainhall example; use output_scripting to get the scripting reference, or
get the version I just uploaded.
If you're totally new to Lua, I recommend you check out
this page on their wiki, it has a number of tutorials to get you started.
Right now I'm a little concerned that this may be a little user-unfriendly. So if you have any suggestions/comments/questions, now would be the time to air them. As I add more functions it gets progressively harder to change the way things are set up.
Requests for functions that you're going to
use is also good. Nothing motivates me (or most of the other coders, I suppose

) more than seeing stuff get used.
The Build and Table