mirror of
https://github.com/id-Software/Wolf3D-iOS.git
synced 2026-03-19 16:39:49 +01:00
392 lines
8.0 KiB
C
392 lines
8.0 KiB
C
/*
|
|
|
|
Copyright (C) 2004-2005 Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
/*
|
|
* main.c: Decode Wolfenstein 3-D data files.
|
|
*
|
|
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
|
*
|
|
*/
|
|
|
|
|
|
/*
|
|
|
|
This program decodes the following Wolfenstein 3-D/Spear of Destiny files:
|
|
|
|
AUDIOHED.xxx -Contains offsets and lengths of the audio in AUDIOT.
|
|
AUDIOT.xxx -Contains Adlib audio data.
|
|
|
|
VGAHEAD.xxx -Contains data offsets for VGAGRAPH.
|
|
VGAGRAPH.xxx -Contains graphic data.
|
|
VGADICT.xxx -Contains Huffman dictionary data.
|
|
|
|
VSWAP.xxx -Contains audio and graphic data.
|
|
|
|
Wolfenstein 3D(tm).mac -Macintosh binary of Wolfenstein 3D
|
|
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
|
|
#include "../../common/arch.h"
|
|
#include "../../common/common_utils.h"
|
|
#include "string/com_string.h"
|
|
#include "wolf/wolf_def.h"
|
|
#include "filesys/file.h"
|
|
#include "hq2x.h"
|
|
#include "mac/mac.h"
|
|
|
|
|
|
#define APP_VERSION "0.01i"
|
|
|
|
#define BASEDIR "base/"
|
|
|
|
|
|
|
|
|
|
extern void PAK_builder( const char *filename, W16 version );
|
|
|
|
|
|
|
|
|
|
/*
|
|
-----------------------------------------------------------------------------
|
|
Function: deleteCacheDirectories -Delete directories created when caching.
|
|
|
|
Parameters: Nothing.
|
|
|
|
Returns: Nothing.
|
|
|
|
Notes:
|
|
-----------------------------------------------------------------------------
|
|
*/
|
|
PRIVATE void deleteCacheDirectories( W16 version )
|
|
{
|
|
FS_RemoveDirectory( GFXWALLDIR );
|
|
FS_RemoveDirectory( MAPDIR );
|
|
FS_RemoveDirectory( LGFXDIR );
|
|
|
|
if( version & WL1_PAK || version & WL6_PAK )
|
|
{
|
|
FS_RemoveDirectory( SFXDIR );
|
|
FS_RemoveDirectory( GFXSPRITEDIR );
|
|
FS_RemoveDirectory( LSFXDIR );
|
|
}
|
|
|
|
if( version & SDM_PAK || version & SOD_PAK )
|
|
{
|
|
FS_RemoveDirectory( SODSFXDIR );
|
|
FS_RemoveDirectory( SODGFXSPRITEDIR );
|
|
FS_RemoveDirectory( SODLSFXDIR );
|
|
}
|
|
}
|
|
|
|
/*
|
|
-----------------------------------------------------------------------------
|
|
Function: CheckForDataFiles -Check for data files.
|
|
|
|
Parameters: Wolf_Ext -[out] zero nothing found.
|
|
Bit 0 high -WL1 data files found.
|
|
Bit 1 high -WL6 data files found.
|
|
Bit 2 high -SDM data files found.
|
|
Bit 3 high -SOD data files found.
|
|
Bit 4 high -MAC data files found.
|
|
|
|
Returns: Nothing.
|
|
|
|
Notes:
|
|
-----------------------------------------------------------------------------
|
|
*/
|
|
void CheckForDataFiles( W16 *Wolf_Ext )
|
|
{
|
|
char ext[ 13 ];
|
|
|
|
//
|
|
// Wolfenstein 3-D Demo
|
|
//
|
|
cs_strlcpy( ext, WL1_FEXT, sizeof( ext ) );
|
|
|
|
if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= WL1_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= WL1_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
|
|
//
|
|
// Wolfenstein 3-D
|
|
//
|
|
cs_strlcpy( ext, WL6_FEXT, sizeof( ext ) );
|
|
|
|
if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= WL6_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= WL6_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
|
|
//
|
|
// Spear of Destiny Demo
|
|
//
|
|
cs_strlcpy( ext, SDM_FEXT, sizeof( ext ) );
|
|
|
|
if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= SDM_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= SDM_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
|
|
//
|
|
// Spear of Destiny
|
|
//
|
|
cs_strlcpy( ext, SOD_FEXT, sizeof( ext ) );
|
|
|
|
if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= SOD_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= SOD_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
//
|
|
// Macintosh Wolfenstein 3-D
|
|
//
|
|
cs_strlcpy( ext, MAC_FEXT, sizeof( ext ) );
|
|
|
|
if( FS_FindFirst( cs_strupr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= MAC_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
|
|
if( FS_FindFirst( cs_strlwr( ext ), 0, 0 ) )
|
|
{
|
|
*Wolf_Ext |= MAC_PAK;
|
|
}
|
|
|
|
FS_FindClose();
|
|
}
|
|
|
|
/*
|
|
-----------------------------------------------------------------------------
|
|
Function: main -Interface to Wolfenstein data decoder.
|
|
|
|
Parameters: Nothing.
|
|
|
|
Returns: 0 on success, non-zero otherwise.
|
|
|
|
Notes: This is the application entry point.
|
|
|
|
1. Search for Wolfenstein data files.
|
|
2. Decode data accordingly.
|
|
|
|
-----------------------------------------------------------------------------
|
|
*/
|
|
int main( int argc, char *argv[] )
|
|
{
|
|
W16 Wolf_Ext = 0; // bit 0 high -WL1 extension
|
|
// bit 1 high -WL6 extension
|
|
// bit 2 high -SDM extension
|
|
// bit 3 high -SOD extension
|
|
// bit 4 high -MAC extension
|
|
|
|
W32 retval;
|
|
|
|
|
|
#if 0
|
|
|
|
extern char gamepal[];
|
|
|
|
int test = 0x32 * 3;
|
|
printf( "%d, %d, %d\n", gamepal[ test ]<<2, gamepal[ test+1 ]<<2, gamepal[ test+2 ]<<2 );
|
|
return 0;
|
|
|
|
#endif
|
|
|
|
#if 0 // hack to just fix the red cross health pack sprite
|
|
{
|
|
void UpdateSingleSprite( const char *srcTGA, const char *destTGA );
|
|
|
|
UpdateSingleSprite( "c:/027.tga", "c:/fixed_027.tga" );
|
|
exit( 0 );
|
|
}
|
|
#endif
|
|
|
|
printf( "\nWolfExtractor %s %s\n", BUILDSTRING, CPUSTRING );
|
|
printf( "Version %s built on %s at %s\n\n", APP_VERSION, __DATE__, __TIME__ );
|
|
|
|
|
|
if( ! FS_ChangeCurrentDirectory( BASEDIR ) )
|
|
{
|
|
printf( "Unable to change into directory (%s)\n", BASEDIR );
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
CheckForDataFiles( &Wolf_Ext );
|
|
if( ! Wolf_Ext )
|
|
{
|
|
printf( "No Wolfenstein data files found!\n" );
|
|
|
|
return 1;
|
|
}
|
|
|
|
InitLUTs(); // This is for hq2x
|
|
|
|
if( Wolf_Ext & WL1_PAK )
|
|
{
|
|
printf( "\nFound Wolfenstein 3-D demo data files\n" );
|
|
|
|
retval = 0;
|
|
|
|
retval = LumpExtractor( WL1_FEXT+1, WL1_LATCHPICS_LUMP_END+5, WL1_PAK );
|
|
retval += PExtractor( WL1_FEXT+1, WL1_PAK );
|
|
retval += AudioRipper( WL1_FEXT+1, 87, 174, WL1_PAK );
|
|
retval += MapRipper( WL1_FEXT+1, WL1_PAK );
|
|
|
|
if( retval != 4 )
|
|
{
|
|
printf( "\nAn Error Has Occurred, exiting!\n" );
|
|
|
|
return 1;
|
|
}
|
|
|
|
//!@# JDC PAK_builder( "wolf_demo.pak", WL1_PAK );
|
|
}
|
|
|
|
|
|
if( Wolf_Ext & WL6_PAK )
|
|
{
|
|
printf( "\nFound Wolfenstein 3-D data files\n" );
|
|
|
|
retval = 0;
|
|
|
|
retval = LumpExtractor( WL6_FEXT+1, WL6_LATCHPICS_LUMP_END, WL6_PAK );
|
|
retval += PExtractor( WL6_FEXT+1, WL6_PAK );
|
|
retval += AudioRipper( WL6_FEXT+1, 87, 174, WL6_PAK );
|
|
retval += MapRipper( WL6_FEXT+1, WL6_PAK );
|
|
|
|
if( retval != 4 )
|
|
{
|
|
printf( "\nAn Error Has Occurred, exiting!\n" );
|
|
|
|
return 1;
|
|
}
|
|
|
|
//!@# JDC PAK_builder( "wolf.pak", WL6_PAK );
|
|
}
|
|
|
|
if( Wolf_Ext & SDM_PAK )
|
|
{
|
|
printf( "\nFound Spear of Destiny demo data files\n" );
|
|
|
|
retval = 0;
|
|
|
|
retval = LumpExtractor( SDM_FEXT+1, 127, SDM_PAK );
|
|
retval += PExtractor( SDM_FEXT+1, SDM_PAK );
|
|
retval += AudioRipper( SDM_FEXT+1, 81, 162, SDM_PAK );
|
|
retval += MapRipper( SDM_FEXT+1, SDM_PAK );
|
|
|
|
if( retval != 4 )
|
|
{
|
|
printf( "\nAn Error Has Occurred, exiting!\n" );
|
|
|
|
return 1;
|
|
}
|
|
|
|
return;
|
|
|
|
//!@# JDC PAK_builder( "spear_demo.pak", SDM_PAK );
|
|
}
|
|
|
|
if( Wolf_Ext & SOD_PAK )
|
|
{
|
|
printf( "\nFound Spear of Destiny data files\n" );
|
|
|
|
retval = 0;
|
|
|
|
retval = LumpExtractor( SOD_FEXT+1, 149, SOD_PAK );
|
|
retval += PExtractor( SOD_FEXT+1, SOD_PAK );
|
|
retval += AudioRipper( SOD_FEXT+1, 81, 162, SOD_PAK );
|
|
retval += MapRipper( SOD_FEXT+1, SOD_PAK );
|
|
|
|
if( retval != 4 )
|
|
{
|
|
printf( "\nAn Error Has Occurred, exiting!\n" );
|
|
|
|
return 1;
|
|
}
|
|
|
|
//!@# JDC PAK_builder( "spear.pak", SOD_PAK );
|
|
}
|
|
|
|
if( Wolf_Ext & MAC_PAK )
|
|
{
|
|
printf( "\nFound Macintosh binary file\n" );
|
|
|
|
ripMac();
|
|
|
|
//PAK_builder( "mac.pak", MAC_PAK );
|
|
}
|
|
|
|
|
|
//!@# JDC deleteCacheDirectories( Wolf_Ext );
|
|
|
|
|
|
return 0;
|
|
}
|
|
|