示例#1
0
/*
-----------------------------------------------------------------------------
 Function: MapRipper -Re-encode map data.
 
 Parameters: extension -[in] file extension for map data files.
 
 Returns: Nothing.
 
 Notes: 
-----------------------------------------------------------------------------
*/
PUBLIC _boolean MapRipper( const char *fextension, W16 version )
{
	W32 i;
	char fname[ 32 ];

	gameversion = version;

//
// Setup
//

	if( 0 == FS_Mkdir( MAPDIR ) )
	{
		printf( "[%s] Could not create directory (%s)!\n", "wolf_map.c", MAPDIR );
		
		return false;
	}


	if( ! CAL_SetupMapFile( fextension ) )
	{
		CAL_ShutdownMapFile();
		
		return false;
	}

//
// Decode Map data
//

	printf( "Decoding Map Data...\n" );

	for( i = 0 ; i < TotalMaps ; ++i )
	{
		cs_snprintf( fname, sizeof( fname ), "%s/%c%.2d.map", MAPDIR, TOLOWER( fextension[ 1 ] ), i );

		CA_CacheMap( headeroffsets[ i ], 
						headeroffsets[ i + 1 ] - headeroffsets[ i ], 
						fname, i );

	}

//
// Shutdown
//

	CAL_ShutdownMapFile();

	return true;
}
示例#2
0
/*
-----------------------------------------------------------------------------
 Function: LumpExtractor() -Extract Lump gfx from Wolf3D and SOD data files.
 
 Parameters: fextension -[in] String holding file extension 
                            (must be in '.XXX' format).
             limit -[in] max
             version -[in] extension version. 
                        1 -WL6
                        2 -SOD 
 
 Returns:   Nothing.
 
 Notes: 

-----------------------------------------------------------------------------
*/
PUBLIC _boolean LumpExtractor( const char *fextension, W32 limit, W16 version )
{
    W32 i;
    W8 *buffer, *buffer2;
	
    
    if( ! fextension || ! *fextension )
    {
        printf( "Invalid file extension passed into LumpExtractor!\n" );
        
		return false;
    }

//
// Setup
//

	if( 0 == FS_Mkdir( LGFXDIR ) )
	{
		printf( "[%s] Could not create directory (%s)!\n", "wolf_gfx.c", LGFXDIR );
		
		return false;
	}

    
    if( ! CAL_SetupGrFile( fextension ) )
	{
		CAL_Shutdown();
		
		return false;
	}
	
//
// Allocate buffers
//

	buffer = MM_MALLOC( 320 * 416 * 2 );
	if( buffer == NULL )
	{
		CAL_Shutdown();
		
		return false;
	}

    buffer2 = MM_MALLOC( 640 * 400 * 4 );
	if( buffer2 == NULL )
	{
		MM_FREE( buffer );
		CAL_Shutdown();
		
		return false;
	}

//
// Decode GFX data
//

	printf( "Decoding GFX Data...\n" );
	
//	(void)DecodeText( version );
	
	
	for( i = STARTFONT; i < STARTPICS; ++i )
    {
        CA_CacheGrChunk( i, version );
        Fontline( i, version );
    }
	
    
    for( i = STARTPICS; i < limit+1; ++i )
    {
        CA_CacheGrChunk( i, version );
        SavePic( i, version, buffer, buffer2 );		
    }
	


//
// Shutdown
//
    
    MM_FREE( buffer2 );
	MM_FREE( buffer );	
    
    CAL_Shutdown();

	return true;
}
示例#3
0
/*
-----------------------------------------------------------------------------
 Function: AudioRipper() -Interface to audio decoder.
 
 Parameters: fextension -[in] file extension string.
			 start -[in] Chunk number for start of audio data.
			 end -[in] Chunk number for end of audio data.
 
 Returns: Nothing.
 
 Notes: 
-----------------------------------------------------------------------------
*/
PUBLIC _boolean AudioRipper( const char *fextension, 
						W32 start, W32 end, W16 version )
{
    W32 i, j;
	char filename[ 64 ];
	W8 *buffChunk;
	W8 *buffWav;
	W32 startofmusic = WL6_STARTMUSIC - 1;
	W32 endofmusic = LASTMUSIC;

//
// Setup
//

	if( version == SOD_PAK || version == SDM_PAK )
	{
		if( 0 == FS_Mkdir( SODLSFXDIR ) )
		{
			printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", SODLSFXDIR );
			
			return false;
		}

		startofmusic = SOD_STARTMUSIC;
		endofmusic = SOD_LASTMUSIC;
	}
	else
	{
		if( 0 == FS_Mkdir( LSFXDIR ) )
		{
			printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", LSFXDIR );
			
			return false;
		}
	}
	

	if( 0 == FS_Mkdir( MUSICDIR ) )
	{
		printf( "[%s] Could not create directory (%s)!\n", "wolf_aud.c", LSFXDIR );
		
		return false;
	}




	
    if( ! CAL_SetupAudioFile( fextension ) )
    {
		CAL_ShutdownAudioFile();
        
		return false;
    }		

    if( ! ADLIB_Init( 22050 ) )
	{
		CAL_ShutdownAudioFile();
		
		return false;
	}

//
// Allocate buffers
//

	buffChunk = MM_MALLOC( MAX_CHUNK_SIZE );
	if( buffChunk == NULL )
	{
		ADLIB_Shutdown();
		CAL_ShutdownAudioFile();
		
		return false;
	}

	buffWav = MM_MALLOC( MAX_WAV_SIZE );
	if( buffWav == NULL )
	{
		ADLIB_Shutdown();
		CAL_ShutdownAudioFile();
		MM_FREE( buffChunk );
		
		return false;
	} 

//
// Decode Audio data
//
   
	printf( "Decoding Audio Data...\n" );
    
	for( i = start, j = 0; i < end; ++i, ++j )
    {        
		if( version == SOD_PAK || version == SDM_PAK )
		{
			cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SODLSFXDIR, j );
		}
		else
		{
			cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", LSFXDIR, j );
		}

		CA_SaveAudioChunk( i, filename, buffChunk, buffWav );
    }

	ADLIB_Shutdown();

	MM_FREE( buffWav );
	MM_FREE( buffChunk );


//
//	Decode Music data
//

	if( ! ADLIB_Init( 44100 ) )
	{
		CAL_ShutdownAudioFile();
		
		return false;
	}

	printf( "Decoding Music Data...\n" );

	for( i = 0 ; i < endofmusic ; ++i )
	{
		if( version == SOD_PAK || version == SDM_PAK )
		{
			cs_snprintf( filename, sizeof( filename ), "%s/%s.ogg", MUSICDIR, GetMusicFileName_SOD( i ) );
		}
		else
		{
			cs_snprintf( filename, sizeof( filename ), "%s/%s.ogg", MUSICDIR, GetMusicFileName_WL6( i ) );
		}

		CA_SaveMusicChunk( startofmusic + i, filename );
	}

	ADLIB_Shutdown();

//
// Shutdown
//	
    
    
    CAL_ShutdownAudioFile();
    
    
    
    return true;
}