int G_LoadRoff( const char *fileName ) { char file[MAX_QPATH]; byte *data; int len, i, roff_id = 0; // Before even bothering with all of this, make sure we have a place to store it. if ( num_roffs >= MAX_ROFFS ) { Com_Printf( S_COLOR_RED"MAX_ROFFS count exceeded. Skipping load of .ROF '%s'\n", fileName ); return roff_id; } // The actual path sprintf( file, "%s/%s.rof", Q3_SCRIPT_DIR, fileName ); // See if I'm already precached for ( i = 0; i < num_roffs; i++ ) { if ( Q_stricmp( file, roffs[i].fileName ) == 0 ) { // Good, just return me...avoid zero index return i + 1; } } #ifdef _DEBUG // Com_Printf( S_COLOR_GREEN"Caching ROF: '%s'\n", file ); #endif // Read the file in one fell swoop len = gi.FS_ReadFile( file, (void**) &data); if ( len <= 0 ) { Com_Printf( S_COLOR_RED"Could not open .ROF file '%s'\n", fileName ); return roff_id; } // Now let's check the header info... roff_hdr2_t *header = (roff_hdr2_t *)data; // ..and make sure it's reasonably valid if ( !G_ValidRoff( header )) { Com_Printf( S_COLOR_RED"Invalid roff format '%s'\n", fileName ); } else { G_InitRoff( file, data ); // Done loading this roff, so save off an id to it..increment first to avoid zero index roff_id = ++num_roffs; } gi.FS_FreeFile( data ); return roff_id; }
int G_LoadRoff( const char *fileName ) { char file[MAX_QPATH]; char data[ROFF_INFO_SIZE]; fileHandle_t f; roff_hdr2_t *header; int len, i, roff_id = 0; // Before even bothering with all of this, make sure we have a place to store it. if ( num_roffs >= MAX_ROFFS ) { Com_Printf( S_COLOR_RED"MAX_ROFFS count exceeded. Skipping load of .ROF '%s'\n", fileName ); return roff_id; } // The actual path sprintf( file, "%s/%s.rof", Q3_SCRIPT_DIR, fileName ); // See if I'm already precached for ( i = 0; i < num_roffs; i++ ) { if ( stricmp( file, roffs[i].fileName ) == 0 ) { // Good, just return me...avoid zero index return i + 1; } } #ifdef _DEBUG // Com_Printf( S_COLOR_GREEN"Caching ROF: '%s'\n", file ); #endif // Read the file in one fell swoop len = trap_FS_FOpenFile(file, &f, FS_READ); if ( len <= 0 ) { Com_Printf( S_COLOR_RED"Could not open .ROF file '%s'\n", fileName ); return roff_id; } if ( len >= ROFF_INFO_SIZE ) { Com_Printf( S_COLOR_RED".ROF file '%s': Too large for file buffer.\n", fileName ); return roff_id; } trap_FS_Read(data, len, f); //read data in buffer trap_FS_FCloseFile(f); //close file // Now let's check the header info... header = (roff_hdr2_t *)data; // ..and make sure it's reasonably valid if ( !G_ValidRoff( header )) { Com_Printf( S_COLOR_RED"Invalid roff format '%s'\n", fileName ); } else { G_InitRoff( file, data ); // Done loading this roff, so save off an id to it..increment first to avoid zero index roff_id = ++num_roffs; } //trap_FS_FCloseFile( data ); return roff_id; }