"Fileless FS2" support.FS2 may be run with as little as a scripting.tbl to tell it what to do and still function. Although I recommend you extract data/fonts/font01.vf from sparky_fs2.vp so you can use the text-based drawing function.
CFile system scripting supportLets you manipulate files, to a certain degree. At this point, the read() and write() functions are modelled after the standard Lua ones, and so are not compatible with binary-based FS2 files. They will work with .tbl files just fine, although you will have to build a parser to do that. Their most valuable use is for advanced campaign- or mod- persistent data; possibly for external config files for scripts. Note that they are limited to standard FS2 directories; this is probably not going to change, although I will consider adding more directories, if there's a pressing reason for it.
SEXP Variables scripting supportRelatively straightforward. To get the name of a variable from a handle, use tostring(variable). You should be able to access all SEXP variables (non-persistent, campaign-persistent, player-persistent), although I've only tested non-persistent variables. To create a new variable, you would use
mn.SEXPVariables['newname'] = "newdata"
If the variable 'newname' already existed, that would simply change the value.
Note that there is a vulnerability - I didn't realize that the original variable setting functions did not bother to check if names and variable values were too long. The limit is 31 characters; any more will cause memory leaks.
Fixed setting handle variablesIf you noticed that you couldn't set any handle variables in the more recent builds, I've fixed this bug.
Silly SEXP fixesOrdinarily I wouldn't remember something this trivial, but oh well.

A couple of the set-*-ammo functions would pop up a warning in debug builds every time they were used, because Karajorma tried to be lazy.
Conditional HooksThese've been in for awhile, but I don't think I've given them much publicity.
;;After #State Hooks section
#Conditional Hooks
$Condition:
$Condition:
;;...
$Action:
$Action:
;;...
;;For example
$Shipclass: GTF Ulysses
$On Weapon Collision: [
gr.FlashScreen(255, 0, 0)
]
Conditions - State, Campaign, Mission, Object type, Ship, Ship class, Ship type, Weapon class
Actions - Hook (deprecated), On Ship Collision, On Weapon Collision, On Debris Collision, On Asteroid Collision, On Warpin, On Warpout, On Death
I've spent quite a bit of time on the collision hooks. Each one will set variables in the ScriptingVariables library when the hook is triggered due to a collision, for each object. For example, a ship and an asteroid colliding will set "sv.Ship" and "sv.Asteroid"; debris and a weapon, "sv.Debris" and "sv.Weapon". Two ships, "sv.Ship" and "sv.ShipB", two weapons, "svWeapon" and "sv.WeaponB". As of now, "ship" and "shipB" are set arbitrarily. These hooks should also have working overrides. Ship & weapon collisions have been tested, debris & asteroid collisions have not been.
Scripting.html (76k, 56k beware.
)http://fs2source.warpcore.org/exes/latest/C10302006.zip