Code:
stock getSequenceName( const model[], const sequence, sequenceName[], nameLen = sizeof sequenceName )
{
static sequencesNameCached;
static sequenceCount;
static Array:arraySequencesName;
if( !sequencesNameCached )
{
new f = fopen( model, "rb" );
if( f )
{
const studioHeader_NumSeq = 164;
const mstudioseqdescSize = 176;
const sequenceNameLength = 32;
new sequenceIndex;
fseek( f, studioHeader_NumSeq, SEEK_SET );
{
fread( f, sequenceCount, BLOCK_INT );
fread( f, sequenceIndex, BLOCK_INT );
}
fseek( f, sequenceIndex, SEEK_SET );
arraySequencesName = ArrayCreate( sequenceNameLength, sequenceCount );
for( new i = 0; i < sequenceCount; i++ )
{
fread_blocks( f, sequenceName, sequenceNameLength, BLOCK_CHAR );
fseek( f, mstudioseqdescSize - sequenceNameLength, SEEK_CUR );
ArrayPushString( arraySequencesName, sequenceName );
}
fclose( f );
if( !( sequencesNameCached = !!ArraySize( arraySequencesName ) ) )
{
ArrayDestroy( arraySequencesName );
return 0;
}
}
}
if( sequencesNameCached && 0 <= sequence < sequenceCount )
{
return formatex( sequenceName, nameLen, "%a", ArrayGetStringHandle( arraySequencesName, sequence ) );
}
return 0;
}