/**
 * \brief Decodes Corridor 7 Shareware data 
 * \return Nothing.
 */
PUBLIC void corridor7share_decoder( void )
{
	printf( "Corridor 7 Alien Invasion Shareware Decoding\n\n" );

	if( ! buildCacheDirectories() )
    {
        fprintf( stderr, "Unable to create cache directories\n" );

		return;
    }
	
	if( GFXFile_Setup( "VGADICT.DMO", "VGAHEAD.DMO", "VGAGRAPH.DMO" ) )
	{
		GFXFile_decodeFont( 1, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 2, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 3, 256, 128, DIR_PICS );

		GFXFile_decodeGFX( 4, 42, corridor_gamepal, DIR_PICS );
	}
	GFXFile_Shutdown();

	PageFile_ReduxDecodePageData( "GFXTILES.DMO", DIR_WALLS, DIR_SPRITES, DIR_DSOUND, corridor_gamepal );


/*
	if( AudioFile_Setup( "AUDIOHED.DMO", "AUDIOT.DMO" ) )
	{
		AudioFile_ReduxDecodeSound( 0, 0, DIR_SOUNDFX );

		AudioFile_ReduxDecodeMusic( 0, 0, DIR_MUSIC, NULL );
	}
	AudioFile_Shutdown();
*/
}
/**
 * \brief Decodes Blake Stone Planet Strike data. 
 * \return Nothing. 
 */
PUBLIC void blakestonePS_decoder( void )
{
	W32 width, height;
	void *data;
	char fname[ 256 ];

	W8 *tempPalette;


	printf( "Blake Stone: Planet Strike Decoding\n\n" );

	if( ! buildCacheDirectories() )
    {
        fprintf( stderr, "Unable to create cache directories\n" );

		return;
    }
	
	if( GFXFile_Setup( "VGADICT.VSI", "VGAHEAD.VSI", "VGAGRAPH.VSI" ) )
	{
		GFXFile_decodeFont( 1, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 2, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 3, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 4, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 5, 256, 128, DIR_PICS );


        GFXFile_decodeScript( 216, 248, DIR_GSCRIPTS );
		

		GFXFile_decodeGFX( 6, 197, blakestone_gamepal, DIR_PICS );
	
		
		
		GFXFile_cacheChunk( 201 );
		tempPalette = (PW8)GFXFile_getChunk( 201 );

		data = GFXFile_decodeChunk_RGB24( 53, &width, &height, tempPalette );
		if( data )
		{
            wt_snprintf( fname, sizeof( fname ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, 53 );
			
			RGB24_adjustBrightness( data, width * height * 3 );
			
			TGA_write( fname, 24, width, height, data, 0, 1 );
			
			MM_FREE( data );
		}


		GFXFile_cacheChunk( 203 );
		tempPalette = (PW8)GFXFile_getChunk( 203 );

		data = GFXFile_decodeChunk_RGB24( 143, &width, &height, tempPalette );
		if( data )
		{
            wt_snprintf( fname, sizeof( fname ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, 143 );
			
			RGB24_adjustBrightness( data, width * height * 3 );
			
			TGA_write( fname, 24, width, height, data, 0, 1 );
			
			MM_FREE( data );
		}

		data = GFXFile_decodeChunk_RGB24( 144, &width, &height, tempPalette );
		if( data )
		{
            wt_snprintf( fname, sizeof( fname ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, 144 );
			
			RGB24_adjustBrightness( data, width * height * 3 );
			
			TGA_write( fname, 24, width, height, data, 0, 1 );
			
			MM_FREE( data );
		}
	
	}
	GFXFile_Shutdown();

	

	PageFile_ReduxDecodePageData( "VSWAP.VSI", DIR_WALLS, DIR_SPRITES, DIR_DSOUND, blakestone_gamepal );

/*
	if( AudioFile_Setup( "AUDIOHED.VSI", "AUDIOT.VSI" ) )
	{
		AudioFile_ReduxDecodeSound( 0, 0, DIR_SOUNDFX );

		AudioFile_ReduxDecodeMusic( 0, 0, DIR_MUSIC, NULL );
	}
	AudioFile_Shutdown();
*/
}
/**
 * \brief Decodes Blake Stone Aliens of Gold Full Version data. 
 * \return Nothing. 
 */
PUBLIC void blakestoneAGfull_decoder( void )
{
	W32 width, height;
	void *data;
	char fname[ 1024 ];

	W8 *tempPalette;

	printf( "\n\nBlake Stone: Aliens of Gold Decoding\n" );

	if( ! buildCacheDirectories() )
    {
        printf( "Unable to create cache directories\n" );

		return;
    }
	
	if( GFXFile_Setup( "VGADICT.BS6", "VGAHEAD.BS6", "VGAGRAPH.BS6" ) )
	{
		GFXFile_decodeFont( 1, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 2, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 3, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 4, 256, 128, DIR_PICS );
		GFXFile_decodeFont( 5, 256, 128, DIR_PICS );

		GFXFile_decodeScript( 181, 223, DIR_GSCRIPTS );

		GFXFile_decodeGFX( 6, 164, blakestone_gamepal, DIR_PICS );


		GFXFile_cacheChunk( 168 );
		tempPalette = (PW8)GFXFile_getChunk( 168 );

		data = GFXFile_decodeChunk_RGB24( 29, &width, &height, tempPalette );
		if( data )
		{
			wt_snprintf( fname, sizeof( fname ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, 29 );
			
			RGB24_adjustBrightness( data, width * height * 3 );
			
			TGA_write( fname, 24, width, height, data, 0, 1 );
			
			MM_FREE( data );
		}


		GFXFile_cacheChunk( 167 );
		tempPalette = (PW8)GFXFile_getChunk( 167 );

		data = GFXFile_decodeChunk_RGB24( 30, &width, &height, tempPalette );
		if( data )
		{
            wt_snprintf( fname, sizeof( fname ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, 30 );
			
			RGB24_adjustBrightness( data, width * height * 3 );
			
			TGA_write( fname, 24, width, height, data, 0, 1 );
			
			MM_FREE( data );
		}

	}
	GFXFile_Shutdown();

	

	PageFile_ReduxDecodePageData( "VSWAP.BS6", DIR_WALLS, DIR_SPRITES, DIR_DSOUND, blakestone_gamepal );

/*
	if( AudioFile_Setup( "AUDIOHED.BS6", "AUDIOT.BS6" ) )
	{
		AudioFile_ReduxDecodeSound( 0, 200, DIR_SOUNDFX );

		AudioFile_ReduxDecodeMusic( 200, 210, DIR_MUSIC, NULL );
	}
	AudioFile_Shutdown();
*/	
}
Example #4
0
/**
 * \brief Converts Wolf3D graphic data.
 * \param[in] dict Name of dictionary file to load.
 * \param[in] head Name of header file to load. 
 * \param[in] graph Name of graphics file to load. 
 * \param[in] start Offset to start of sprite data
 * \param[in] end Offset to end of sprite data
 * \param[in] picNum Pointer to picNum_t structure to 
 * \param[in] GetReduxGFXFileName Call back function to get file names for graphics data.
 * \return On success true, otherwise false.
 */
PRIVATE wtBoolean wolf3d_gfx( char *dict, char *head, char *graph, W32 start, W32 end, picNum_t *picNum,
							 char *(*GetReduxGFXFileName)( W32 ) )
{
	wtBoolean bRetVal;
	W32 width, height;
	void *data;
	W32 i;
	char tempFileName[ 1024 ];


    printf( "\nDecoding GFX..." );
	
		
	bRetVal = GFXFile_Setup( dict, head, graph );
    if( ! bRetVal )
	{		
        printf( "Failed\n" );
        return false;
    }

	for( i = 1; i < start; ++i )
	{			
		GFXFile_decodeFont( i, 256, 128, DIR_PICS );
	}

    // Create directory for help scripts   "gscripts/wolfhelp%.3d.txt"
	GFXFile_decodeScript( picNum->PN_HelpScript, picNum->PN_HelpScript+1, DIR_GSCRIPTS );
	GFXFile_decodeScript( picNum->PN_ScriptStart, picNum->PN_ScriptEnd, DIR_GSCRIPTS );


	for( i = start ; i < end ; ++i )
	{
		GFXFile_cacheChunk( i );
        data = GFXFile_decodeChunk_RGB32( i, &width, &height, wolf_gamepal );
		if( NULL == data )
		{
            continue;
        }

        if( _doRedux )
        {
        	W32 id;
        	void *updata;
        	
        	id = 0;
            updata = wolfcore_ReduxGFX( i, data, &width, &height, &id, wolf_gamepal, picNum );
            if( updata == NULL )
            {
            	MM_FREE( data );
            	
            	continue;
            }
            
            wt_snprintf( tempFileName, sizeof( tempFileName ), "%s%c%s.tga", DIR_PICS, PATH_SEP, GetReduxGFXFileName( i ) );
			
            RGB32toRGB24( updata, updata, width * height * 4 );
			TGA_write( tempFileName, 24, width, height, updata, 0, 1 );
		
			 // updata and data could point to the same memory block.
            if( updata == data)
            {
	            MM_FREE( data );
            }
            else
            {
                MM_FREE( data );
                MM_FREE( updata );
            }
			
			i += id;                        
        }
		else
		{		
            wt_snprintf( tempFileName, sizeof( tempFileName ), "%s%c%.3d.tga", DIR_PICS, PATH_SEP, i );
			
            RGB32toRGB24( data, data, width * height * 4 ); 
			TGA_write( tempFileName, 24, width, height, data, 0, 1 );
		
			MM_FREE( data );
		}
				
	}

	GFXFile_Shutdown();

    printf( "Done\n" );
	
	return bRetVal;
}