Right... *digs up source code*
This is what I have (pseudo-C struct):
struct FF7SCRIPTHEADER {
WORD unknown1;
BYTE nEntities; // Number of entities
BYTE unknown2; // Always less than nEntities; possibly visible entities?
WORD wStringOffset; // Offset to strings
WORD nExtraOffsets; // An optional number of extra offsets... unknown
WORD unknown4[4];
char szCreator[8]; // Field creator (never shown)
char szName[8]; // Field name (never shown)
char szEntities[nEntities][8]; // Field entity names
DWORD dwExtraOffsets[nExtraOffsets]; // Said extra offsets... unknown
WORD vEntityScripts[nEntities][32]; // Entity script entry points (offsets to subroutines)
};
The actual script follows immediately after the data above.
There is no distinction between entities and "sections" (in my book). All scriptable "objects" are entities, and only their scripts determine whether they are PCs, NPCs, ladders, chests or background controllers. In fact, an "entitity" is entirely defined as "a set of scripts" (entry points, subroutines, whatever the term used). The second unknown item possibly refers to the number of entities that actually display models on-screen (and thus gives the number of such controllers that need to be allocated by the script module upon loading the field), but I have yet to confirm that and as such it is just a guess at this point.