/* ----------------------------------------------------------------------------- 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; }
/* ----------------------------------------------------------------------------- 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; }
/* ----------------------------------------------------------------------------- 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; }