mirror of
https://github.com/id-Software/Wolf3D-iOS.git
synced 2026-03-20 00:49:35 +01:00
Source release of Wolfenstein 3D Classic Platinum for iOS, 2.1
This commit is contained in:
760
wolf3d/wolfextractor/wolf/wl6_name.c
Normal file
760
wolf3d/wolfextractor/wolf/wl6_name.c
Normal file
@@ -0,0 +1,760 @@
|
||||
/*
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* wl6_name.c: Convert chunk number to string name.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Wolfenstein 3-D, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "wolf_def.h"
|
||||
#include "../../../common/arch.h"
|
||||
#include "../../../common/common_utils.h"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: GetLumpFileName_WL1() -Returns lump name string.
|
||||
|
||||
Parameters: chunk -[in] Chunk value to get string name for.
|
||||
|
||||
Returns: NULL on error, otherwise string name.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PUBLIC char *GetLumpFileName_WL1( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case WL1_H_BJPIC: return "H_BJPIC";
|
||||
case WL1_H_CASTLEPIC: return "H_CASTLEPIC";
|
||||
case WL1_H_KEYBOARDPIC: return "H_KEYBOARDPIC";
|
||||
case WL1_H_CONTROLPIC: return "H_CONTROLPIC";
|
||||
case WL1_H_HEALPIC: return "H_HEALPIC";
|
||||
case WL1_H_BGPIC: return "H_BGPIC";
|
||||
case WL1_H_GUNPIC: return "H_GUNPIC";
|
||||
case WL1_H_KEYPIC: return "H_KEYPIC";
|
||||
case WL1_H_BLAZEPIC: return "H_BLAZEPIC";
|
||||
case WL1_H_WEAPON1234PIC: return "H_WEAPON1234PIC";
|
||||
case WL1_H_WOLFLOGOPIC: return "H_WOLFLOGOPIC";
|
||||
case WL1_H_VISAPIC: return "H_VISAPIC";
|
||||
case WL1_H_MCPIC: return "H_MCPIC";
|
||||
case WL1_H_IDLOGOPIC: return "H_IDLOGOPIC";
|
||||
case WL1_H_TOPWINDOWPIC: return "H_TOPWINDOWPI";
|
||||
case WL1_H_LEFTWINDOWPIC: return "H_LEFTWINDOWPIC";
|
||||
case WL1_H_RIGHTWINDOWPIC: return "H_RIGHTWINDOWPIC";
|
||||
case WL1_H_BOTTOMINFOPIC: return "H_BOTTOMINFOPIC";
|
||||
case WL1_H_GAMEPIC: return "H_GAMEPIC";
|
||||
|
||||
case WL1_C_OPTIONSPIC: return "C_OPTIONSPIC";
|
||||
case WL1_C_CURSOR1PIC: return "C_CURSOR0PIC";
|
||||
case WL1_C_CURSOR2PIC: return "C_CURSOR1PIC";
|
||||
case WL1_C_NOTSELECTEDPIC: return "C_NOTSELECTEDPIC";
|
||||
case WL1_C_SELECTEDPIC: return "C_SELECTEDPIC";
|
||||
case WL1_C_FXTITLEPIC: return "C_FXTITLEPIC";
|
||||
case WL1_C_DIGITITLEPIC: return "C_DIGITITLEPIC";
|
||||
case WL1_C_MUSICTITLEPIC: return "C_MUSICTITLEPIC";
|
||||
case WL1_C_MOUSELBACKPIC: return "C_MOUSELBACKPIC";
|
||||
case WL1_C_BABYMODEPIC: return "C_SKILL1PIC";
|
||||
case WL1_C_EASYPIC: return "C_SKILL2PIC";
|
||||
case WL1_C_NORMALPIC: return "C_SKILL3PIC";
|
||||
case WL1_C_HARDPIC: return "C_SKILL4PIC";
|
||||
case WL1_C_LOADSAVEDISKPIC: return "C_LOADSAVEDISKPIC";
|
||||
case WL1_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC";
|
||||
case WL1_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC";
|
||||
case WL1_C_CONTROLPIC: return "C_CONTROLPIC";
|
||||
case WL1_C_CUSTOMIZEPIC: return "C_CUSTOMIZEPIC";
|
||||
case WL1_C_LOADGAMEPIC: return "C_LOADGAMEPIC";
|
||||
case WL1_C_SAVEGAMEPIC: return "C_SAVEGAMEPIC";
|
||||
case WL1_C_EPISODE1PIC: return "C_EPISODE1PIC";
|
||||
case WL1_C_EPISODE2PIC: return "C_EPISODE2PIC";
|
||||
case WL1_C_EPISODE3PIC: return "C_EPISODE3PIC";
|
||||
case WL1_C_EPISODE4PIC: return "C_EPISODE4PIC";
|
||||
case WL1_C_EPISODE5PIC: return "C_EPISODE5PIC";
|
||||
case WL1_C_EPISODE6PIC: return "C_EPISODE6PIC";
|
||||
case WL1_C_CODEPIC: return "C_CODEPIC";
|
||||
case WL1_C_TIMECODEPIC: return "C_TIMECODEPIC";
|
||||
case WL1_C_LEVELPIC: return "C_LEVELPIC";
|
||||
case WL1_C_NAMEPIC: return "C_NAMEPIC";
|
||||
case WL1_C_SCOREPIC: return "C_SCOREPIC";
|
||||
case WL1_C_JOY1PIC: return "C_JOY1PIC";
|
||||
case WL1_C_JOY2PIC: return "C_JOY2PIC";
|
||||
|
||||
case WL1_L_GUYPIC: return "L_GUY0PIC";
|
||||
case WL1_L_COLONPIC:
|
||||
case WL1_L_NUM0PIC:
|
||||
case WL1_L_NUM1PIC:
|
||||
case WL1_L_NUM2PIC:
|
||||
case WL1_L_NUM3PIC:
|
||||
case WL1_L_NUM4PIC:
|
||||
case WL1_L_NUM5PIC:
|
||||
case WL1_L_NUM6PIC:
|
||||
case WL1_L_NUM7PIC:
|
||||
case WL1_L_NUM8PIC:
|
||||
case WL1_L_NUM9PIC:
|
||||
case WL1_L_PERCENTPIC:
|
||||
case WL1_L_APIC:
|
||||
case WL1_L_BPIC:
|
||||
case WL1_L_CPIC:
|
||||
case WL1_L_DPIC:
|
||||
case WL1_L_EPIC:
|
||||
case WL1_L_FPIC:
|
||||
case WL1_L_GPIC:
|
||||
case WL1_L_HPIC:
|
||||
case WL1_L_IPIC:
|
||||
case WL1_L_JPIC:
|
||||
case WL1_L_KPIC:
|
||||
case WL1_L_LPIC:
|
||||
case WL1_L_MPIC:
|
||||
case WL1_L_NPIC:
|
||||
case WL1_L_OPIC:
|
||||
case WL1_L_PPIC:
|
||||
case WL1_L_QPIC:
|
||||
case WL1_L_RPIC:
|
||||
case WL1_L_SPIC:
|
||||
case WL1_L_TPIC:
|
||||
case WL1_L_UPIC:
|
||||
case WL1_L_VPIC:
|
||||
case WL1_L_WPIC:
|
||||
case WL1_L_XPIC:
|
||||
case WL1_L_YPIC:
|
||||
case WL1_L_ZPIC:
|
||||
case WL1_L_EXPOINTPIC:
|
||||
case WL1_L_APOSTROPHEPIC: return "L_FONTPIC";
|
||||
case WL1_L_GUY2PIC: return "L_GUY1PIC";
|
||||
case WL1_L_BJWINSPIC: return "L_BJWINSPIC";
|
||||
case WL1_STATUSBARPIC: return "STATUSBARPIC";
|
||||
case WL1_TITLEPIC: return "TITLEPIC";
|
||||
case WL1_PG13PIC: return "PC13PIC";
|
||||
case WL1_CREDITSPIC: return "CREDITSPIC";
|
||||
case WL1_HIGHSCORESPIC: return "HIGHSCORESPIC";
|
||||
|
||||
case WL1_KNIFEPIC: return "KNIFEPIC";
|
||||
case WL1_GUNPIC: return "GUNPIC";
|
||||
case WL1_MACHINEGUNPIC: return "MACHINEGUNPIC";
|
||||
case WL1_GATLINGGUNPIC: return "GATLINGGUNPIC";
|
||||
case WL1_NOKEYPIC: return "NOKEYPIC";
|
||||
case WL1_GOLDKEYPIC: return "GOLDKEYPIC";
|
||||
case WL1_SILVERKEYPIC: return "SILVERKEYPIC";
|
||||
case WL1_N_BLANKPIC: return "N_BLANKPIC";
|
||||
case WL1_N_0PIC:
|
||||
case WL1_N_1PIC:
|
||||
case WL1_N_2PIC:
|
||||
case WL1_N_3PIC:
|
||||
case WL1_N_4PIC:
|
||||
case WL1_N_5PIC:
|
||||
case WL1_N_6PIC:
|
||||
case WL1_N_7PIC:
|
||||
case WL1_N_8PIC:
|
||||
case WL1_N_9PIC: return "N_NUMPIC";
|
||||
case WL1_FACE1APIC: return "FACE1APIC";
|
||||
case WL1_FACE1BPIC: return "FACE1BPIC";
|
||||
case WL1_FACE1CPIC: return "FACE1CPIC";
|
||||
case WL1_FACE2APIC: return "FACE2APIC";
|
||||
case WL1_FACE2BPIC: return "FACE2BPIC";
|
||||
case WL1_FACE2CPIC: return "FACE2CPIC";
|
||||
case WL1_FACE3APIC: return "FACE3APIC";
|
||||
case WL1_FACE3BPIC: return "FACE3BPIC";
|
||||
case WL1_FACE3CPIC: return "FACE3CPIC";
|
||||
case WL1_FACE4APIC: return "FACE4APIC";
|
||||
case WL1_FACE4BPIC: return "FACE4BPIC";
|
||||
case WL1_FACE4CPIC: return "FACE4CPIC";
|
||||
case WL1_FACE5APIC: return "FACE5APIC";
|
||||
case WL1_FACE5BPIC: return "FACE5BPIC";
|
||||
case WL1_FACE5CPIC: return "FACE5CPIC";
|
||||
case WL1_FACE6APIC: return "FACE6APIC";
|
||||
case WL1_FACE6BPIC: return "FACE6BPIC";
|
||||
case WL1_FACE6CPIC: return "FACE6CPIC";
|
||||
case WL1_FACE7APIC: return "FACE7APIC";
|
||||
case WL1_FACE7BPIC: return "FACE7BPIC";
|
||||
case WL1_FACE7CPIC: return "FACE7CPIC";
|
||||
case WL1_FACE8APIC: return "FACE8APIC";
|
||||
case WL1_GOTGATLINGPIC: return "GOTGATLINGPIC";
|
||||
case WL1_MUTANTBJPIC: return "MUTANTBJPIC";
|
||||
case WL1_PAUSEDPIC: return "PAUSEDPIC";
|
||||
case WL1_GETPSYCHEDPIC: return "GETPSYCHEDPIC";
|
||||
|
||||
default: return NULL;
|
||||
} // End switch chunk
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: GetLumpFileName_WL6() -Returns lump name string.
|
||||
|
||||
Parameters: chunk -[in] Chunk value to get string name for.
|
||||
|
||||
Returns: NULL on error, otherwise string name.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PUBLIC char *GetLumpFileName_WL6( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case H_BJPIC: return "H_BJPIC";
|
||||
case H_CASTLEPIC: return "H_CASTLEPIC";
|
||||
case H_BLAZEPIC: return "H_BLAZEPIC";
|
||||
case H_TOPWINDOWPIC: return "H_TOPWINDOWPIC";
|
||||
case H_LEFTWINDOWPIC: return "H_LEFTWINDOWPIC";
|
||||
case H_RIGHTWINDOWPIC: return "H_RIGHTWINDOWPIC";
|
||||
case H_BOTTOMINFOPIC: return "H_BOTTOMINFOPIC";
|
||||
case C_OPTIONSPIC: return "C_OPTIONSPIC";
|
||||
case C_CURSOR1PIC: return "C_CURSOR0PIC";
|
||||
case C_CURSOR2PIC: return "C_CURSOR1PIC";
|
||||
case C_NOTSELECTEDPIC: return "C_NOTSELECTEDPIC";
|
||||
case C_SELECTEDPIC: return "C_SELECTEDPIC";
|
||||
case C_FXTITLEPIC: return "C_FXTITLEPIC";
|
||||
case C_DIGITITLEPIC: return "C_DIGITITLEPIC";
|
||||
case C_MUSICTITLEPIC: return "C_MUSICTITLEPIC";
|
||||
case C_MOUSELBACKPIC: return "C_MOUSELBACKPIC";
|
||||
case C_BABYMODEPIC: return "C_SKILL1PIC";
|
||||
case C_EASYPIC: return "C_SKILL2PIC";
|
||||
case C_NORMALPIC: return "C_SKILL3PIC";
|
||||
case C_HARDPIC: return "C_SKILL4PIC";
|
||||
case C_LOADSAVEDISKPIC: return "C_LOADSAVEDISKPIC";
|
||||
case C_DISKLOADING1PIC: return "C_DISKLOADING0PIC";
|
||||
case C_DISKLOADING2PIC: return "C_DISKLOADING1PIC";
|
||||
case C_CONTROLPIC: return "C_CONTROLPIC";
|
||||
case C_CUSTOMIZEPIC: return "C_CUSTOMIZEPIC";
|
||||
case C_LOADGAMEPIC: return "C_LOADGAMEPIC";
|
||||
case C_SAVEGAMEPIC: return "C_SAVEGAMEPIC";
|
||||
case C_EPISODE1PIC: return "C_EPISODE1PIC";
|
||||
case C_EPISODE2PIC: return "C_EPISODE2PIC";
|
||||
case C_EPISODE3PIC: return "C_EPISODE3PIC";
|
||||
case C_EPISODE4PIC: return "C_EPISODE4PIC";
|
||||
case C_EPISODE5PIC: return "C_EPISODE5PIC";
|
||||
case C_EPISODE6PIC: return "C_EPISODE6PIC";
|
||||
case C_CODEPIC: return "C_CODEPIC";
|
||||
case C_TIMECODEPIC: return "C_TIMECODEPIC";
|
||||
case C_LEVELPIC: return "C_LEVELPIC";
|
||||
case C_NAMEPIC: return "C_NAMEPIC";
|
||||
case C_SCOREPIC: return "C_SCOREPIC";
|
||||
case C_JOY1PIC: return "C_JOY1PIC";
|
||||
case C_JOY2PIC: return "C_JOY2PIC";
|
||||
|
||||
case L_GUYPIC: return "L_GUY0PIC";
|
||||
case L_COLONPIC:
|
||||
case L_NUM0PIC:
|
||||
case L_NUM1PIC:
|
||||
case L_NUM2PIC:
|
||||
case L_NUM3PIC:
|
||||
case L_NUM4PIC:
|
||||
case L_NUM5PIC:
|
||||
case L_NUM6PIC:
|
||||
case L_NUM7PIC:
|
||||
case L_NUM8PIC:
|
||||
case L_NUM9PIC:
|
||||
case L_PERCENTPIC:
|
||||
case L_APIC:
|
||||
case L_BPIC:
|
||||
case L_CPIC:
|
||||
case L_DPIC:
|
||||
case L_EPIC:
|
||||
case L_FPIC:
|
||||
case L_GPIC:
|
||||
case L_HPIC:
|
||||
case L_IPIC:
|
||||
case L_JPIC:
|
||||
case L_KPIC:
|
||||
case L_LPIC:
|
||||
case L_MPIC:
|
||||
case L_NPIC:
|
||||
case L_OPIC:
|
||||
case L_PPIC:
|
||||
case L_QPIC:
|
||||
case L_RPIC:
|
||||
case L_SPIC:
|
||||
case L_TPIC:
|
||||
case L_UPIC:
|
||||
case L_VPIC:
|
||||
case L_WPIC:
|
||||
case L_XPIC:
|
||||
case L_YPIC:
|
||||
case L_ZPIC:
|
||||
case L_EXPOINTPIC:
|
||||
case L_APOSTROPHEPIC: return "L_FONTPIC";
|
||||
case L_GUY2PIC: return "L_GUY1PIC";
|
||||
case L_BJWINSPIC: return "L_BJWINSPIC";
|
||||
case STATUSBARPIC: return "STATUSBARPIC";
|
||||
case TITLEPIC: return "TITLEPIC";
|
||||
case PG13PIC: return "PC13PIC";
|
||||
case CREDITSPIC: return "CREDITSPIC";
|
||||
case HIGHSCORESPIC: return "HIGHSCORESPIC";
|
||||
case KNIFEPIC: return "KNIFEPIC";
|
||||
case GUNPIC: return "GUNPIC";
|
||||
case MACHINEGUNPIC: return "MACHINEGUNPIC";
|
||||
case GATLINGGUNPIC: return "GATLINGGUNPIC";
|
||||
case NOKEYPIC: return "NOKEYPIC";
|
||||
case GOLDKEYPIC: return "GOLDKEYPIC";
|
||||
case SILVERKEYPIC: return "SILVERKEYPIC";
|
||||
case N_BLANKPIC: return "N_BLANKPIC";
|
||||
case N_0PIC:
|
||||
case N_1PIC:
|
||||
case N_2PIC:
|
||||
case N_3PIC:
|
||||
case N_4PIC:
|
||||
case N_5PIC:
|
||||
case N_6PIC:
|
||||
case N_7PIC:
|
||||
case N_8PIC:
|
||||
case N_9PIC: return "N_NUMPIC";
|
||||
case FACE1APIC: return "FACE1APIC";
|
||||
case FACE1BPIC: return "FACE1BPIC";
|
||||
case FACE1CPIC: return "FACE1CPIC";
|
||||
case FACE2APIC: return "FACE2APIC";
|
||||
case FACE2BPIC: return "FACE2BPIC";
|
||||
case FACE2CPIC: return "FACE2CPIC";
|
||||
case FACE3APIC: return "FACE3APIC";
|
||||
case FACE3BPIC: return "FACE3BPIC";
|
||||
case FACE3CPIC: return "FACE3CPIC";
|
||||
case FACE4APIC: return "FACE4APIC";
|
||||
case FACE4BPIC: return "FACE4BPIC";
|
||||
case FACE4CPIC: return "FACE4CPIC";
|
||||
case FACE5APIC: return "FACE5APIC";
|
||||
case FACE5BPIC: return "FACE5BPIC";
|
||||
case FACE5CPIC: return "FACE5CPIC";
|
||||
case FACE6APIC: return "FACE6APIC";
|
||||
case FACE6BPIC: return "FACE6BPIC";
|
||||
case FACE6CPIC: return "FACE6CPIC";
|
||||
case FACE7APIC: return "FACE7APIC";
|
||||
case FACE7BPIC: return "FACE7BPIC";
|
||||
case FACE7CPIC: return "FACE7CPIC";
|
||||
case FACE8APIC: return "FACE8APIC";
|
||||
case GOTGATLINGPIC: return "GOTGATLINGPIC";
|
||||
case MUTANTBJPIC: return "MUTANTBJPIC";
|
||||
case PAUSEDPIC: return "PAUSEDPIC";
|
||||
case GETPSYCHEDPIC: return "GETPSYCHEDPIC";
|
||||
|
||||
default: return NULL;
|
||||
} // End switch chunk
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: GetLumpFileName_SDM() -Returns lump name string.
|
||||
|
||||
Parameters: chunk -[in] Chunk value to get string name for.
|
||||
|
||||
Returns: NULL on error, otherwise string name.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PUBLIC char *GetLumpFileName_SDM( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case SDM_C_BACKDROPPIC: return "C_BACKDROPPIC";
|
||||
case SDM_C_MOUSELBACKPIC: return "SC_MOUSELBACKPIC";
|
||||
case SDM_C_CURSOR1PIC: return "SC_CURSOR0PIC";
|
||||
case SDM_C_CURSOR2PIC: return "SC_CURSOR1PIC";
|
||||
case SDM_C_NOTSELECTEDPIC: return "SC_NOTSELECTEDPIC";
|
||||
case SDM_C_SELECTEDPIC: return "SC_SELECTEDPIC";
|
||||
|
||||
case SDM_C_CUSTOMIZEPIC: return "SC_CUSTOMIZEPIC";
|
||||
case SDM_C_JOY1PIC: return "C_JOY1PIC";
|
||||
case SDM_C_JOY2PIC: return "C_JOY2PIC";
|
||||
case SDM_C_MOUSEPIC: return "C_MOUSEPIC";
|
||||
case SDM_C_JOYSTICKPIC: return "C_JOYSTICKPIC";
|
||||
case SDM_C_KEYBOARDPIC: return "C_KEYBOARDPIC";
|
||||
case SDM_C_CONTROLPIC: return "SC_CONTROLPIC";
|
||||
|
||||
case SDM_C_OPTIONSPIC: return "SC_OPTIONSPIC";
|
||||
|
||||
case SDM_C_FXTITLEPIC: return "SC_FXTITLEPIC";
|
||||
case SDM_C_DIGITITLEPIC: return "SC_DIGITITLEPIC";
|
||||
case SDM_C_MUSICTITLEPIC: return "SC_MUSICTITLEPIC";
|
||||
|
||||
case SDM_C_HOWTOUGHPIC: return "C_HOWTOUGHPIC";
|
||||
case SDM_C_BABYMODEPIC: return "SC_SKILL1PIC";
|
||||
case SDM_C_EASYPIC: return "SC_SKILL2PIC";
|
||||
case SDM_C_NORMALPIC: return "SC_SKILL3PIC";
|
||||
case SDM_C_HARDPIC: return "SC_SKILL4PIC";
|
||||
|
||||
case SDM_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC";
|
||||
case SDM_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC";
|
||||
case SDM_C_LOADGAMEPIC: return "SC_LOADGAMEPIC";
|
||||
case SDM_C_SAVEGAMEPIC: return "SC_SAVEGAMEPIC";
|
||||
|
||||
case SDM_HIGHSCORESPIC: return "SHIGHSCORESPIC";
|
||||
case SDM_C_WONSPEARPIC: return "C_WONSPEARPIC";
|
||||
|
||||
case SDM_L_GUYPIC: return "L_GUY0PIC";
|
||||
case SDM_L_COLONPIC:
|
||||
case SDM_L_NUM0PIC:
|
||||
case SDM_L_NUM1PIC:
|
||||
case SDM_L_NUM2PIC:
|
||||
case SDM_L_NUM3PIC:
|
||||
case SDM_L_NUM4PIC:
|
||||
case SDM_L_NUM5PIC:
|
||||
case SDM_L_NUM6PIC:
|
||||
case SDM_L_NUM7PIC:
|
||||
case SDM_L_NUM8PIC:
|
||||
case SDM_L_NUM9PIC:
|
||||
case SDM_L_PERCENTPIC:
|
||||
case SDM_L_APIC:
|
||||
case SDM_L_BPIC:
|
||||
case SDM_L_CPIC:
|
||||
case SDM_L_DPIC:
|
||||
case SDM_L_EPIC:
|
||||
case SDM_L_FPIC:
|
||||
case SDM_L_GPIC:
|
||||
case SDM_L_HPIC:
|
||||
case SDM_L_IPIC:
|
||||
case SDM_L_JPIC:
|
||||
case SDM_L_KPIC:
|
||||
case SDM_L_LPIC:
|
||||
case SDM_L_MPIC:
|
||||
case SDM_L_NPIC:
|
||||
case SDM_L_OPIC:
|
||||
case SDM_L_PPIC:
|
||||
case SDM_L_QPIC:
|
||||
case SDM_L_RPIC:
|
||||
case SDM_L_SPIC:
|
||||
case SDM_L_TPIC:
|
||||
case SDM_L_UPIC:
|
||||
case SDM_L_VPIC:
|
||||
case SDM_L_WPIC:
|
||||
case SDM_L_XPIC:
|
||||
case SDM_L_YPIC:
|
||||
case SDM_L_ZPIC:
|
||||
case SDM_L_EXPOINTPIC:
|
||||
case SDM_L_APOSTROPHEPIC: return "L_FONTPIC";
|
||||
case SDM_L_GUY2PIC: return "L_GUY1PIC";
|
||||
case SDM_L_BJWINSPIC: return "L_BJWINSPIC";
|
||||
|
||||
case SDM_TITLE1PIC:
|
||||
case SDM_TITLE2PIC: return "STITLEPIC";
|
||||
case SDM_STATUSBARPIC: return "STATUSBARPIC";
|
||||
case SDM_PG13PIC: return "PC13PIC";
|
||||
case SDM_CREDITSPIC: return "SCREDITSPIC";
|
||||
|
||||
case SDM_KNIFEPIC: return "KNIFEPIC";
|
||||
case SDM_GUNPIC: return "GUNPIC";
|
||||
case SDM_MACHINEGUNPIC: return "MACHINEGUNPIC";
|
||||
case SDM_GATLINGGUNPIC: return "GATLINGGUNPIC";
|
||||
case SDM_NOKEYPIC: return "NOKEYPIC";
|
||||
case SDM_GOLDKEYPIC: return "GOLDKEYPIC";
|
||||
case SDM_SILVERKEYPIC: return "SILVERKEYPIC";
|
||||
case SDM_N_BLANKPIC: return "N_BLANKPIC";
|
||||
case SDM_N_0PIC:
|
||||
case SDM_N_1PIC:
|
||||
case SDM_N_2PIC:
|
||||
case SDM_N_3PIC:
|
||||
case SDM_N_4PIC:
|
||||
case SDM_N_5PIC:
|
||||
case SDM_N_6PIC:
|
||||
case SDM_N_7PIC:
|
||||
case SDM_N_8PIC:
|
||||
case SDM_N_9PIC: return "N_NUMPIC";
|
||||
case SDM_FACE1APIC: return "FACE1APIC";
|
||||
case SDM_FACE1BPIC: return "FACE1BPIC";
|
||||
case SDM_FACE1CPIC: return "FACE1CPIC";
|
||||
case SDM_FACE2APIC: return "FACE2APIC";
|
||||
case SDM_FACE2BPIC: return "FACE2BPIC";
|
||||
case SDM_FACE2CPIC: return "FACE2CPIC";
|
||||
case SDM_FACE3APIC: return "FACE3APIC";
|
||||
case SDM_FACE3BPIC: return "FACE3BPIC";
|
||||
case SDM_FACE3CPIC: return "FACE3CPIC";
|
||||
case SDM_FACE4APIC: return "FACE4APIC";
|
||||
case SDM_FACE4BPIC: return "FACE4BPIC";
|
||||
case SDM_FACE4CPIC: return "FACE4CPIC";
|
||||
case SDM_FACE5APIC: return "FACE5APIC";
|
||||
case SDM_FACE5BPIC: return "FACE5BPIC";
|
||||
case SDM_FACE5CPIC: return "FACE5CPIC";
|
||||
case SDM_FACE6APIC: return "FACE6APIC";
|
||||
case SDM_FACE6BPIC: return "FACE6BPIC";
|
||||
case SDM_FACE6CPIC: return "FACE6CPIC";
|
||||
case SDM_FACE7APIC: return "FACE7APIC";
|
||||
case SDM_FACE7BPIC: return "FACE7BPIC";
|
||||
case SDM_FACE7CPIC: return "FACE7CPIC";
|
||||
case SDM_FACE8APIC: return "FACE8APIC";
|
||||
case SDM_GOTGATLINGPIC: return "GOTGATLINGPIC";
|
||||
case SDM_GODMODEFACE1PIC: return "GODMODEFACE0PIC";
|
||||
case SDM_GODMODEFACE2PIC: return "GODMODEFACE1PIC";
|
||||
case SDM_GODMODEFACE3PIC: return "GODMODEFACE2PIC";
|
||||
case SDM_BJWAITING1PIC: return "BJWAITING0PIC";
|
||||
case SDM_BJWAITING2PIC: return "BJWAITING1PIC";
|
||||
case SDM_BJOUCHPIC: return "BJOUCHPIC";
|
||||
case SDM_PAUSEDPIC: return "PAUSEDPIC";
|
||||
case SDM_GETPSYCHEDPIC: return "GETPSYCHEDPIC";
|
||||
|
||||
default: return NULL;
|
||||
|
||||
} // End switch chunk
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: GetLumpFileName_SOD() -Returns lump name string.
|
||||
|
||||
Parameters: chunk -[in] Chunk value to get string name for.
|
||||
|
||||
Returns: NULL on error, otherwise string name.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PUBLIC char *GetLumpFileName_SOD( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case SOD_C_BACKDROPPIC: return "C_BACKDROPPIC";
|
||||
case SOD_C_MOUSELBACKPIC: return "SC_MOUSELBACKPIC";
|
||||
case SOD_C_CURSOR1PIC: return "SC_CURSOR0PIC";
|
||||
case SOD_C_CURSOR2PIC: return "SC_CURSOR1PIC";
|
||||
case SOD_C_NOTSELECTEDPIC: return "SC_NOTSELECTEDPIC";
|
||||
case SOD_C_SELECTEDPIC: return "SC_SELECTEDPIC";
|
||||
case SOD_C_CUSTOMIZEPIC: return "SC_CUSTOMIZEPIC";
|
||||
case SOD_C_JOY1PIC: return "C_JOY1PIC";
|
||||
case SOD_C_JOY2PIC: return "C_JOY2PIC";
|
||||
case SOD_C_MOUSEPIC: return "C_MOUSEPIC";
|
||||
case SOD_C_JOYSTICKPIC: return "C_JOYSTICKPIC";
|
||||
case SOD_C_KEYBOARDPIC: return "C_KEYBOARDPIC";
|
||||
case SOD_C_CONTROLPIC: return "SC_CONTROLPIC";
|
||||
case SOD_C_OPTIONSPIC: return "SC_OPTIONSPIC";
|
||||
case SOD_C_FXTITLEPIC: return "SC_FXTITLEPIC";
|
||||
case SOD_C_DIGITITLEPIC: return "SC_DIGITITLEPIC";
|
||||
case SOD_C_MUSICTITLEPIC: return "SC_MUSICTITLEPIC";
|
||||
case SOD_C_HOWTOUGHPIC: return "C_HOWTOUGHPIC";
|
||||
case SOD_C_BABYMODEPIC: return "SC_SKILL1PIC";
|
||||
case SOD_C_EASYPIC: return "SC_SKILL2PIC";
|
||||
case SOD_C_NORMALPIC: return "SC_SKILL3PIC";
|
||||
case SOD_C_HARDPIC: return "SC_SKILL4PIC";
|
||||
case SOD_C_DISKLOADING1PIC: return "C_DISKLOADING0PIC";
|
||||
case SOD_C_DISKLOADING2PIC: return "C_DISKLOADING1PIC";
|
||||
case SOD_C_LOADGAMEPIC: return "SC_LOADGAMEPIC";
|
||||
case SOD_C_SAVEGAMEPIC: return "SC_SAVEGAMEPIC";
|
||||
case SOD_HIGHSCORESPIC: return "SHIGHSCORESPIC";
|
||||
case SOD_C_WONSPEARPIC: return "C_WONSPEARPIC";
|
||||
case SOD_BJCOLLAPSE1PIC: return "BJCOLLAPSE1PIC";
|
||||
case SOD_BJCOLLAPSE2PIC: return "BJCOLLAPSE2PIC";
|
||||
case SOD_BJCOLLAPSE3PIC: return "BJCOLLAPSE3PIC";
|
||||
case SOD_BJCOLLAPSE4PIC: return "BJCOLLAPSE4PIC";
|
||||
case SOD_ENDPICPIC: return "ENDPICPIC";
|
||||
case SOD_L_GUYPIC: return "L_GUY0PIC";
|
||||
case SOD_L_COLONPIC:
|
||||
case SOD_L_NUM0PIC:
|
||||
case SOD_L_NUM1PIC:
|
||||
case SOD_L_NUM2PIC:
|
||||
case SOD_L_NUM3PIC:
|
||||
case SOD_L_NUM4PIC:
|
||||
case SOD_L_NUM5PIC:
|
||||
case SOD_L_NUM6PIC:
|
||||
case SOD_L_NUM7PIC:
|
||||
case SOD_L_NUM8PIC:
|
||||
case SOD_L_NUM9PIC:
|
||||
case SOD_L_PERCENTPIC:
|
||||
case SOD_L_APIC:
|
||||
case SOD_L_BPIC:
|
||||
case SOD_L_CPIC:
|
||||
case SOD_L_DPIC:
|
||||
case SOD_L_EPIC:
|
||||
case SOD_L_FPIC:
|
||||
case SOD_L_GPIC:
|
||||
case SOD_L_HPIC:
|
||||
case SOD_L_IPIC:
|
||||
case SOD_L_JPIC:
|
||||
case SOD_L_KPIC:
|
||||
case SOD_L_LPIC:
|
||||
case SOD_L_MPIC:
|
||||
case SOD_L_NPIC:
|
||||
case SOD_L_OPIC:
|
||||
case SOD_L_PPIC:
|
||||
case SOD_L_QPIC:
|
||||
case SOD_L_RPIC:
|
||||
case SOD_L_SPIC:
|
||||
case SOD_L_TPIC:
|
||||
case SOD_L_UPIC:
|
||||
case SOD_L_VPIC:
|
||||
case SOD_L_WPIC:
|
||||
case SOD_L_XPIC:
|
||||
case SOD_L_YPIC:
|
||||
case SOD_L_ZPIC:
|
||||
case SOD_L_EXPOINTPIC:
|
||||
case SOD_L_APOSTROPHEPIC: return "L_FONTPIC";
|
||||
case SOD_L_GUY2PIC: return "L_GUY1PIC";
|
||||
case SOD_L_BJWINSPIC: return "L_BJWINSPIC";
|
||||
case SOD_TITLE1PIC:
|
||||
case SOD_TITLE2PIC: return "STITLEPIC";
|
||||
case SOD_ENDSCREEN11PIC: return "ENDSCREEN11PIC";
|
||||
case SOD_ENDSCREEN12PIC: return "ENDSCREEN12PIC";
|
||||
case SOD_ENDSCREEN3PIC: return "ENDSCREEN3PIC";
|
||||
case SOD_ENDSCREEN4PIC: return "ENDSCREEN4PIC";
|
||||
case SOD_ENDSCREEN5PIC: return "ENDSCREEN5PIC";
|
||||
case SOD_ENDSCREEN6PIC: return "ENDSCREEN6PIC";
|
||||
case SOD_ENDSCREEN7PIC: return "ENDSCREEN7PIC";
|
||||
case SOD_ENDSCREEN8PIC: return "ENDSCREEN8PIC";
|
||||
case SOD_ENDSCREEN9PIC: return "ENDSCREEN9PIC";
|
||||
case SOD_STATUSBARPIC: return "STATUSBARPIC";
|
||||
case SOD_PG13PIC: return "PC13PIC";
|
||||
case SOD_CREDITSPIC: return "SCREDITSPIC";
|
||||
case SOD_IDGUYS1PIC:
|
||||
case SOD_IDGUYS2PIC: return "IDGUYSPIC";
|
||||
case SOD_COPYPROTTOPPIC: return "COPYPROTTOPPIC";
|
||||
case SOD_COPYPROTBOXPIC: return "COPYPROTBOXPIC";
|
||||
case SOD_BOSSPIC1PIC: return "BOSSPIC1PIC";
|
||||
case SOD_BOSSPIC2PIC: return "BOSSPIC2PIC";
|
||||
case SOD_BOSSPIC3PIC: return "BOSSPIC3PIC";
|
||||
case SOD_BOSSPIC4PIC: return "BOSSPIC4PIC";
|
||||
case SOD_KNIFEPIC: return "KNIFEPIC";
|
||||
case SOD_GUNPIC: return "GUNPIC";
|
||||
case SOD_MACHINEGUNPIC: return "MACHINEGUNPIC";
|
||||
case SOD_GATLINGGUNPIC: return "GATLINGGUNPIC";
|
||||
case SOD_NOKEYPIC: return "NOKEYPIC";
|
||||
case SOD_GOLDKEYPIC: return "GOLDKEYPIC";
|
||||
case SOD_SILVERKEYPIC: return "SILVERKEYPIC";
|
||||
case SOD_N_BLANKPIC: return "N_BLANKPIC";
|
||||
case SOD_N_0PIC:
|
||||
case SOD_N_1PIC:
|
||||
case SOD_N_2PIC:
|
||||
case SOD_N_3PIC:
|
||||
case SOD_N_4PIC:
|
||||
case SOD_N_5PIC:
|
||||
case SOD_N_6PIC:
|
||||
case SOD_N_7PIC:
|
||||
case SOD_N_8PIC:
|
||||
case SOD_N_9PIC: return "N_NUMPIC";
|
||||
case SOD_FACE1APIC: return "FACE1APIC";
|
||||
case SOD_FACE1BPIC: return "FACE1BPIC";
|
||||
case SOD_FACE1CPIC: return "FACE1CPIC";
|
||||
case SOD_FACE2APIC: return "FACE2APIC";
|
||||
case SOD_FACE2BPIC: return "FACE2BPIC";
|
||||
case SOD_FACE2CPIC: return "FACE2CPIC";
|
||||
case SOD_FACE3APIC: return "FACE3APIC";
|
||||
case SOD_FACE3BPIC: return "FACE3BPIC";
|
||||
case SOD_FACE3CPIC: return "FACE3CPIC";
|
||||
case SOD_FACE4APIC: return "FACE4APIC";
|
||||
case SOD_FACE4BPIC: return "FACE4BPIC";
|
||||
case SOD_FACE4CPIC: return "FACE4CPIC";
|
||||
case SOD_FACE5APIC: return "FACE5APIC";
|
||||
case SOD_FACE5BPIC: return "FACE5BPIC";
|
||||
case SOD_FACE5CPIC: return "FACE5CPIC";
|
||||
case SOD_FACE6APIC: return "FACE6APIC";
|
||||
case SOD_FACE6BPIC: return "FACE6BPIC";
|
||||
case SOD_FACE6CPIC: return "FACE6CPIC";
|
||||
case SOD_FACE7APIC: return "FACE7APIC";
|
||||
case SOD_FACE7BPIC: return "FACE7BPIC";
|
||||
case SOD_FACE7CPIC: return "FACE7CPIC";
|
||||
case SOD_FACE8APIC: return "FACE8APIC";
|
||||
case SOD_GOTGATLINGPIC: return "GOTGATLINGPIC";
|
||||
case SOD_GODMODEFACE1PIC: return "GODMODEFACE0PIC";
|
||||
case SOD_GODMODEFACE2PIC: return "GODMODEFACE1PIC";
|
||||
case SOD_GODMODEFACE3PIC: return "GODMODEFACE2PIC";
|
||||
case SOD_BJWAITING1PIC: return "BJWAITING0PIC";
|
||||
case SOD_BJWAITING2PIC: return "BJWAITING1PIC";
|
||||
case SOD_BJOUCHPIC: return "BJOUCHPIC";
|
||||
case SOD_PAUSEDPIC: return "PAUSEDPIC";
|
||||
case SOD_GETPSYCHEDPIC: return "GETPSYCHEDPIC";
|
||||
|
||||
default: return NULL;
|
||||
|
||||
} // End switch chunk
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PUBLIC char *GetMusicFileName_WL6( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case CORNER_MUS: return "CORNER";
|
||||
case DUNGEON_MUS: return "DUNGEON";
|
||||
case WARMARCH_MUS: return "WARMARCH";
|
||||
case GETTHEM_MUS: return "GETTHEM";
|
||||
case HEADACHE_MUS: return "HEADACHE";
|
||||
case HITLWLTZ_MUS: return "HITLWLTZ";
|
||||
case INTROCW3_MUS: return "INTROCW3";
|
||||
case NAZI_NOR_MUS: return "NAZI_NOR";
|
||||
case NAZI_OMI_MUS: return "NAZI_OMI";
|
||||
case POW_MUS: return "POW";
|
||||
case SALUTE_MUS: return "SALUTE";
|
||||
case SEARCHN_MUS: return "SEARCHN";
|
||||
case SUSPENSE_MUS: return "SUSPENSE";
|
||||
case VICTORS_MUS: return "VICTORS";
|
||||
case WONDERIN_MUS: return "WONDERIN";
|
||||
case FUNKYOU_MUS: return "FUNKYOU";
|
||||
case ENDLEVEL_MUS: return "ENDLEVEL";
|
||||
case GOINGAFT_MUS: return "GOINGAFT";
|
||||
case PREGNANT_MUS: return "PREGNANT";
|
||||
case ULTIMATE_MUS: return "ULTIMATE";
|
||||
case NAZI_RAP_MUS: return "NAZI_RAP";
|
||||
case ZEROHOUR_MUS: return "ZEROHOUR";
|
||||
case TWELFTH_MUS: return "TWELFTH";
|
||||
case ROSTER_MUS: return "ROSTER";
|
||||
case URAHERO_MUS: return "URAHERO";
|
||||
case VICMARCH_MUS: return "VICMARCH";
|
||||
case PACMAN_MUS: return "PACMAN";
|
||||
|
||||
default: return NULL;
|
||||
|
||||
} // End switch chunk
|
||||
|
||||
}
|
||||
|
||||
PUBLIC char *GetMusicFileName_SOD( W32 chunk )
|
||||
{
|
||||
switch( chunk )
|
||||
{
|
||||
case SOD_XFUNKIE_MUS: return "XFUNKIE";
|
||||
case SOD_DUNGEON_MUS: return "DUNGEON";
|
||||
case SOD_XDEATH_MUS: return "XDEATH";
|
||||
case SOD_GETTHEM_MUS: return "GETTHEM";
|
||||
case SOD_XTIPTOE_MUS: return "XTIPTOE";
|
||||
case SOD_GOINGAFT_MUS: return "GOINGAFT";
|
||||
case SOD_URAHERO_MUS: return "URAHERO";
|
||||
case SOD_XTHEEND_MUS: return "XTHEEND";
|
||||
case SOD_NAZI_OMI_MUS: return "NAZI_OMI";
|
||||
case SOD_POW_MUS: return "POW";
|
||||
case SOD_TWELFTH_MUS: return "TWELFTH";
|
||||
case SOD_SEARCHN_MUS: return "SEARCHN";
|
||||
case SOD_SUSPENSE_MUS: return "SUSPENSE";
|
||||
case SOD_ZEROHOUR_MUS: return "ZEROHOUR";
|
||||
case SOD_WONDERIN_MUS: return "WONDERIN";
|
||||
case SOD_ULTIMATE_MUS: return "ULTIMATE";
|
||||
case SOD_ENDLEVEL_MUS: return "ENDLEVEL";
|
||||
case SOD_XEVIL_MUS: return "XEVIL";
|
||||
case SOD_XJAZNAZI_MUS: return "XJAZNAZI";
|
||||
case SOD_COPYPRO_MUS: return "COPYPRO";
|
||||
case SOD_XAWARD_MUS: return "XAWARD";
|
||||
case SOD_XPUTIT_MUS: return "XPUTIT";
|
||||
case SOD_XGETYOU_MUS: return "XGETYOU";
|
||||
case SOD_XTOWER2_MUS: return "XTOWER2";
|
||||
|
||||
default: return NULL;
|
||||
|
||||
} // End switch chunk
|
||||
|
||||
}
|
||||
507
wolf3d/wolfextractor/wolf/wolf_aud.c
Normal file
507
wolf3d/wolfextractor/wolf/wolf_aud.c
Normal file
@@ -0,0 +1,507 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2004 Michael Liebscher
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* wolf_aud.c: Decode Wolfenstein 3-D Adlib audio data.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
* Date: 2004
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Wolfenstein 3-D, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "wolf_def.h"
|
||||
|
||||
#include "../string/com_string.h"
|
||||
#include "../adlib/adlib.h"
|
||||
#include "../adlib/fmopl.h"
|
||||
#include "../loaders/wav.h"
|
||||
#include "../filesys/file.h"
|
||||
#include "../../../common/common_utils.h"
|
||||
#include "../../../common/arch.h"
|
||||
#include "../memory/memory.h"
|
||||
|
||||
#define AHEADFNAME "AUDIOHED"
|
||||
#define AUDIOFNAME "AUDIOT"
|
||||
|
||||
|
||||
#define MAX_CHUNK_SIZE 500
|
||||
|
||||
|
||||
#define WL6_STARTMUSIC 262
|
||||
#define SOD_STARTMUSIC 243
|
||||
|
||||
|
||||
|
||||
PRIVATE FILE *audiohandle;
|
||||
|
||||
PRIVATE W32 *audiostarts;
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CAL_SetupAudioFile() -Setup for decoding audio data.
|
||||
|
||||
Parameters: fextension -[in] Pointer to string with file extension.
|
||||
|
||||
Returns: Non-zero on success, otherwise zero.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 CAL_SetupAudioFile( const char *fextension )
|
||||
{
|
||||
FILE *handle;
|
||||
SW32 length;
|
||||
W32 count;
|
||||
char fname[ 13 ];
|
||||
|
||||
if( ! fextension || ! *fextension )
|
||||
{
|
||||
printf( "NULL extension passed into CAL_SetupAudioFile!\n" );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// load audiohed.XXX (offsets and lengths for audio file)
|
||||
//
|
||||
cs_strlcpy( fname, AHEADFNAME, sizeof( fname ) );
|
||||
cs_strlcat( fname, fextension, sizeof( fname ) );
|
||||
|
||||
handle = fopen( cs_strupr( fname ), "rb" );
|
||||
if( handle == NULL )
|
||||
{
|
||||
handle = fopen( cs_strlwr( fname ), "rb" );
|
||||
|
||||
if( handle == NULL )
|
||||
{
|
||||
printf( "Can not open file (%s) for read!\n", fname );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
length = FS_FileLength( handle );
|
||||
if( length < 4 )
|
||||
{
|
||||
fclose( handle );
|
||||
printf( "Incorrect audio header size on file: %s\n", fname );
|
||||
return 0;
|
||||
}
|
||||
|
||||
audiostarts = (PW32) MM_MALLOC( length );
|
||||
if( audiostarts == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
count = fread( audiostarts, sizeof( W32 ), length >> 2, handle );
|
||||
if( count != (W32)(length >> 2) )
|
||||
{
|
||||
fclose( handle );
|
||||
printf( "[Error]: Read error on file: (%s)", fname );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
fclose( handle );
|
||||
|
||||
//
|
||||
// open the Audio data file
|
||||
//
|
||||
cs_strlcpy( fname, AUDIOFNAME, sizeof( fname ) );
|
||||
cs_strlcat( fname, fextension, sizeof( fname ) );
|
||||
|
||||
audiohandle = fopen( cs_strupr( fname ), "rb" );
|
||||
if( audiohandle == NULL )
|
||||
{
|
||||
audiohandle = fopen( cs_strlwr( fname ), "rb" );
|
||||
if( audiohandle == NULL )
|
||||
{
|
||||
printf( "Could not open file (%s) for read!\n", fname );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CA_CacheAudioChunk() -Cache audio data.
|
||||
|
||||
Parameters: chunk -[in] Chunk number to cache.
|
||||
BuffChunk -[in] Allocated memory block to hold data.
|
||||
|
||||
Returns: Non-zero on success, otherwise zero.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 CA_CacheAudioChunk( W32 chunk, W8 *BuffChunk )
|
||||
{
|
||||
W32 pos, length, count;
|
||||
|
||||
|
||||
//
|
||||
// load the chunk into a buffer
|
||||
//
|
||||
pos = audiostarts[ chunk ];
|
||||
length = audiostarts[ chunk+1 ] - pos;
|
||||
if( length < 1 || length > MAX_CHUNK_SIZE )
|
||||
{
|
||||
printf( "[CA_CacheAudioChunk]: Chunk length not valid\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if( fseek( audiohandle, pos, SEEK_SET ) != 0 )
|
||||
{
|
||||
printf( "[CA_CacheAudioChunk]: Could not seek!\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
count = fread( BuffChunk, 1, length, audiohandle );
|
||||
if( count != length )
|
||||
{
|
||||
printf( "[CA_CacheAudioChunk]: Read error!\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CA_SaveAudioChunk() -Decode and save audio data.
|
||||
|
||||
Parameters: chunk -[in] Chunk number to cache.
|
||||
filename -[in] Save as filename.
|
||||
BuffChunk -[in] Sound data to decode.
|
||||
BuffWav -[in] Allocated memory block to hold decoded data.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void CA_SaveAudioChunk( W32 chunk, const char *filename,
|
||||
W8 *BuffChunk, W8 *BuffWav )
|
||||
{
|
||||
W32 length;
|
||||
|
||||
if( ! filename || ! *filename )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( ! CA_CacheAudioChunk( chunk, BuffChunk ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( ADLIB_DecodeSound( (AdLibSound *)BuffChunk, BuffWav, &length ) == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
write_wav( filename, BuffWav, length, 1, 22050, 2 );
|
||||
}
|
||||
|
||||
|
||||
extern W32 ADLIB_UpdateMusic( W32 size, void *buffer );
|
||||
extern W32 ADLIB_getLength( void *musbuffer );
|
||||
extern void ADLIB_LoadMusic( void *musbuffer );
|
||||
|
||||
extern int vorbis_encode( const char *filename, void *data, W32 size, W32 in_channels, W32 in_samplesize,
|
||||
W32 rate, W32 quality, W32 max_bitrate, W32 min_bitrate );
|
||||
|
||||
|
||||
#define NCH 1 // channels
|
||||
#define BPS 16 // bit per second
|
||||
|
||||
PRIVATE void CA_SaveMusicChunk( W32 chunk, const char *filename )
|
||||
{
|
||||
W8 *data, *BuffWav;
|
||||
W32 pos, length, uncompr_length;
|
||||
W32 len;
|
||||
|
||||
|
||||
pos = audiostarts[ chunk ];
|
||||
length = audiostarts[ chunk+1 ] - pos;
|
||||
|
||||
data = MM_MALLOC( length );
|
||||
if( data == NULL )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( fseek( audiohandle, pos, SEEK_SET ) != 0 )
|
||||
{
|
||||
printf( "[CA_SaveMusicChunk]: Could not seek!\n" );
|
||||
|
||||
MM_FREE( data );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if( fread( data, 1, length, audiohandle ) != length )
|
||||
{
|
||||
printf( "[CA_SaveMusicChunk]: Read error!\n" );
|
||||
|
||||
MM_FREE( data );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
uncompr_length = ADLIB_getLength( data );
|
||||
if( uncompr_length == 1 )
|
||||
{
|
||||
MM_FREE( data );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
ADLIB_LoadMusic( data );
|
||||
|
||||
BuffWav = MM_MALLOC( uncompr_length * 64 * 2 );
|
||||
if( BuffWav == NULL )
|
||||
{
|
||||
MM_FREE( data );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
len = ADLIB_UpdateMusic( uncompr_length, BuffWav );
|
||||
|
||||
|
||||
#if 1
|
||||
|
||||
vorbis_encode( filename, BuffWav, len, 1, 16, 44100, 0, 0, 0 );
|
||||
|
||||
#else
|
||||
|
||||
write_wav( filename, BuffWav, len, 1, 44100, 2 );
|
||||
|
||||
#endif
|
||||
|
||||
MM_FREE( BuffWav );
|
||||
MM_FREE( data );
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CAL_ShutdownAudioFile() -Decode and save audio data.
|
||||
|
||||
Parameters: Nothing.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void CAL_ShutdownAudioFile()
|
||||
{
|
||||
if( audiohandle )
|
||||
{
|
||||
fclose( audiohandle );
|
||||
audiohandle = NULL;
|
||||
}
|
||||
|
||||
if( audiostarts )
|
||||
{
|
||||
MM_FREE( audiostarts );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
919
wolf3d/wolfextractor/wolf/wolf_def.h
Normal file
919
wolf3d/wolfextractor/wolf/wolf_def.h
Normal file
@@ -0,0 +1,919 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2004 Michael Liebscher
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* wolf_def.h: Valid chunk numbers for Wolfenstein 3-D and Spear of Destiny.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
* Date: 2004
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Wolfenstein 3-D, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Notes:
|
||||
This module is implemented by wolf_aud.c, wolf_gfx.c, wolf_map.c,
|
||||
wolf_pal.c, wolf_pm.c and wl6_name.c.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef __WOLF_DEF_H__
|
||||
#define __WOLF_DEF_H__
|
||||
|
||||
#include "../../../common/arch.h"
|
||||
|
||||
|
||||
#define WL1_PAK (1<<0)
|
||||
#define WL6_PAK (1<<1)
|
||||
#define SDM_PAK (1<<2)
|
||||
#define SOD_PAK (1<<3)
|
||||
#define MAC_PAK (1<<4)
|
||||
#define THREEDO_PAK (1<<5)
|
||||
|
||||
|
||||
#define WL1_FEXT "*.WL1"
|
||||
#define WL6_FEXT "*.WL6"
|
||||
#define SDM_FEXT "*.SDM"
|
||||
#define SOD_FEXT "*.SOD"
|
||||
#define MAC_FEXT "*.MAC"
|
||||
|
||||
|
||||
|
||||
#define GFXWALLDIR "walls"
|
||||
#define GFXSPRITEDIR "sprites"
|
||||
#define SFXDIR "sfx"
|
||||
|
||||
#define SODGFXSPRITEDIR "sodsprites"
|
||||
#define SODSFXDIR "sodsfx"
|
||||
|
||||
#define MAPDIR "maps"
|
||||
|
||||
#define LGFXDIR "pics"
|
||||
|
||||
#define LSFXDIR "lsfx"
|
||||
#define SODLSFXDIR "sodlsfx"
|
||||
|
||||
#define MUSICDIR "music"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// Lump Start
|
||||
WL1_H_BJPIC = 3,
|
||||
WL1_H_CASTLEPIC, // 4
|
||||
WL1_H_KEYBOARDPIC, // 5
|
||||
WL1_H_CONTROLPIC, // 6
|
||||
WL1_H_HEALPIC, // 7
|
||||
WL1_H_BGPIC, // 8
|
||||
WL1_H_GUNPIC, // 9
|
||||
WL1_H_KEYPIC, // 10
|
||||
WL1_H_BLAZEPIC, // 11
|
||||
WL1_H_WEAPON1234PIC, // 12
|
||||
WL1_H_WOLFLOGOPIC, // 13
|
||||
WL1_H_VISAPIC, // 14
|
||||
WL1_H_MCPIC, // 15
|
||||
WL1_H_IDLOGOPIC, // 16
|
||||
WL1_H_TOPWINDOWPIC, // 17
|
||||
WL1_H_LEFTWINDOWPIC, // 18
|
||||
WL1_H_RIGHTWINDOWPIC, // 19
|
||||
WL1_H_BOTTOMINFOPIC, // 20
|
||||
WL1_H_GAMEPIC, // 21
|
||||
// Lump Start
|
||||
WL1_C_OPTIONSPIC, // 22
|
||||
WL1_C_CURSOR1PIC, // 23
|
||||
WL1_C_CURSOR2PIC, // 24
|
||||
WL1_C_NOTSELECTEDPIC, // 25
|
||||
WL1_C_SELECTEDPIC, // 26
|
||||
WL1_C_FXTITLEPIC, // 27
|
||||
WL1_C_DIGITITLEPIC, // 28
|
||||
WL1_C_MUSICTITLEPIC, // 29
|
||||
WL1_C_MOUSELBACKPIC, // 30
|
||||
WL1_C_BABYMODEPIC, // 31
|
||||
WL1_C_EASYPIC, // 32
|
||||
WL1_C_NORMALPIC, // 33
|
||||
WL1_C_HARDPIC, // 34
|
||||
WL1_C_LOADSAVEDISKPIC, // 35
|
||||
WL1_C_DISKLOADING1PIC, // 36
|
||||
WL1_C_DISKLOADING2PIC, // 37
|
||||
WL1_C_CONTROLPIC, // 38
|
||||
WL1_C_CUSTOMIZEPIC, // 39
|
||||
WL1_C_LOADGAMEPIC, // 40
|
||||
WL1_C_SAVEGAMEPIC, // 41
|
||||
WL1_C_EPISODE1PIC, // 42
|
||||
WL1_C_EPISODE2PIC, // 43
|
||||
WL1_C_EPISODE3PIC, // 44
|
||||
WL1_C_EPISODE4PIC, // 45
|
||||
WL1_C_EPISODE5PIC, // 46
|
||||
WL1_C_EPISODE6PIC, // 47
|
||||
WL1_C_CODEPIC, // 48
|
||||
WL1_C_TIMECODEPIC, // 49
|
||||
WL1_C_LEVELPIC, // 50
|
||||
WL1_C_NAMEPIC, // 51
|
||||
WL1_C_SCOREPIC, // 52
|
||||
WL1_C_JOY1PIC, // 53
|
||||
WL1_C_JOY2PIC, // 54
|
||||
// Lump Start
|
||||
WL1_L_GUYPIC, // 55
|
||||
WL1_L_COLONPIC, // 56
|
||||
WL1_L_NUM0PIC, // 57
|
||||
WL1_L_NUM1PIC, // 58
|
||||
WL1_L_NUM2PIC, // 59
|
||||
WL1_L_NUM3PIC, // 60
|
||||
WL1_L_NUM4PIC, // 61
|
||||
WL1_L_NUM5PIC, // 62
|
||||
WL1_L_NUM6PIC, // 63
|
||||
WL1_L_NUM7PIC, // 64
|
||||
WL1_L_NUM8PIC, // 65
|
||||
WL1_L_NUM9PIC, // 66
|
||||
WL1_L_PERCENTPIC, // 67
|
||||
WL1_L_APIC, // 68
|
||||
WL1_L_BPIC, // 69
|
||||
WL1_L_CPIC, // 70
|
||||
WL1_L_DPIC, // 71
|
||||
WL1_L_EPIC, // 72
|
||||
WL1_L_FPIC, // 73
|
||||
WL1_L_GPIC, // 74
|
||||
WL1_L_HPIC, // 75
|
||||
WL1_L_IPIC, // 76
|
||||
WL1_L_JPIC, // 77
|
||||
WL1_L_KPIC, // 78
|
||||
WL1_L_LPIC, // 79
|
||||
WL1_L_MPIC, // 80
|
||||
WL1_L_NPIC, // 81
|
||||
WL1_L_OPIC, // 82
|
||||
WL1_L_PPIC, // 83
|
||||
WL1_L_QPIC, // 84
|
||||
WL1_L_RPIC, // 85
|
||||
WL1_L_SPIC, // 86
|
||||
WL1_L_TPIC, // 87
|
||||
WL1_L_UPIC, // 88
|
||||
WL1_L_VPIC, // 89
|
||||
WL1_L_WPIC, // 90
|
||||
WL1_L_XPIC, // 91
|
||||
WL1_L_YPIC, // 92
|
||||
WL1_L_ZPIC, // 93
|
||||
WL1_L_EXPOINTPIC, // 94
|
||||
WL1_L_APOSTROPHEPIC, // 95
|
||||
WL1_L_GUY2PIC, // 96
|
||||
WL1_L_BJWINSPIC, // 97
|
||||
WL1_STATUSBARPIC, // 98
|
||||
WL1_TITLEPIC, // 99
|
||||
WL1_PG13PIC, // 100
|
||||
WL1_CREDITSPIC, // 101
|
||||
WL1_HIGHSCORESPIC, // 102
|
||||
// Lump Start
|
||||
WL1_KNIFEPIC, // 103
|
||||
WL1_GUNPIC, // 104
|
||||
WL1_MACHINEGUNPIC, // 105
|
||||
WL1_GATLINGGUNPIC, // 106
|
||||
WL1_NOKEYPIC, // 107
|
||||
WL1_GOLDKEYPIC, // 108
|
||||
WL1_SILVERKEYPIC, // 109
|
||||
WL1_N_BLANKPIC, // 110
|
||||
WL1_N_0PIC, // 111
|
||||
WL1_N_1PIC, // 112
|
||||
WL1_N_2PIC, // 113
|
||||
WL1_N_3PIC, // 114
|
||||
WL1_N_4PIC, // 115
|
||||
WL1_N_5PIC, // 116
|
||||
WL1_N_6PIC, // 117
|
||||
WL1_N_7PIC, // 118
|
||||
WL1_N_8PIC, // 119
|
||||
WL1_N_9PIC, // 120
|
||||
WL1_FACE1APIC, // 121
|
||||
WL1_FACE1BPIC, // 122
|
||||
WL1_FACE1CPIC, // 123
|
||||
WL1_FACE2APIC, // 124
|
||||
WL1_FACE2BPIC, // 125
|
||||
WL1_FACE2CPIC, // 126
|
||||
WL1_FACE3APIC, // 127
|
||||
WL1_FACE3BPIC, // 128
|
||||
WL1_FACE3CPIC, // 129
|
||||
WL1_FACE4APIC, // 130
|
||||
WL1_FACE4BPIC, // 131
|
||||
WL1_FACE4CPIC, // 132
|
||||
WL1_FACE5APIC, // 133
|
||||
WL1_FACE5BPIC, // 134
|
||||
WL1_FACE5CPIC, // 135
|
||||
WL1_FACE6APIC, // 136
|
||||
WL1_FACE6BPIC, // 137
|
||||
WL1_FACE6CPIC, // 138
|
||||
WL1_FACE7APIC, // 139
|
||||
WL1_FACE7BPIC, // 140
|
||||
WL1_FACE7CPIC, // 141
|
||||
WL1_FACE8APIC, // 142
|
||||
WL1_GOTGATLINGPIC, // 143
|
||||
WL1_MUTANTBJPIC, // 144
|
||||
WL1_PAUSEDPIC, // 145
|
||||
WL1_GETPSYCHEDPIC, // 146
|
||||
|
||||
WL1_ENUMEND
|
||||
|
||||
} wl1_graphicnums;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// Lump Start
|
||||
H_BJPIC = 3,
|
||||
H_CASTLEPIC, // 4
|
||||
H_BLAZEPIC, // 5
|
||||
H_TOPWINDOWPIC, // 6
|
||||
H_LEFTWINDOWPIC, // 7
|
||||
H_RIGHTWINDOWPIC, // 8
|
||||
H_BOTTOMINFOPIC, // 9
|
||||
// Lump Start
|
||||
C_OPTIONSPIC, // 10
|
||||
C_CURSOR1PIC, // 11
|
||||
C_CURSOR2PIC, // 12
|
||||
C_NOTSELECTEDPIC, // 13
|
||||
C_SELECTEDPIC, // 14
|
||||
C_FXTITLEPIC, // 15
|
||||
C_DIGITITLEPIC, // 16
|
||||
C_MUSICTITLEPIC, // 17
|
||||
C_MOUSELBACKPIC, // 18
|
||||
C_BABYMODEPIC, // 19
|
||||
C_EASYPIC, // 20
|
||||
C_NORMALPIC, // 21
|
||||
C_HARDPIC, // 22
|
||||
C_LOADSAVEDISKPIC, // 23
|
||||
C_DISKLOADING1PIC, // 24
|
||||
C_DISKLOADING2PIC, // 25
|
||||
C_CONTROLPIC, // 26
|
||||
C_CUSTOMIZEPIC, // 27
|
||||
C_LOADGAMEPIC, // 28
|
||||
C_SAVEGAMEPIC, // 29
|
||||
C_EPISODE1PIC, // 30
|
||||
C_EPISODE2PIC, // 31
|
||||
C_EPISODE3PIC, // 32
|
||||
C_EPISODE4PIC, // 33
|
||||
C_EPISODE5PIC, // 34
|
||||
C_EPISODE6PIC, // 35
|
||||
C_CODEPIC, // 36
|
||||
C_TIMECODEPIC, // 37
|
||||
C_LEVELPIC, // 38
|
||||
C_NAMEPIC, // 39
|
||||
C_SCOREPIC, // 40
|
||||
C_JOY1PIC, // 41
|
||||
C_JOY2PIC, // 42
|
||||
// Lump Start
|
||||
L_GUYPIC, // 43
|
||||
L_COLONPIC, // 44
|
||||
L_NUM0PIC, // 45
|
||||
L_NUM1PIC, // 46
|
||||
L_NUM2PIC, // 47
|
||||
L_NUM3PIC, // 48
|
||||
L_NUM4PIC, // 49
|
||||
L_NUM5PIC, // 50
|
||||
L_NUM6PIC, // 51
|
||||
L_NUM7PIC, // 52
|
||||
L_NUM8PIC, // 53
|
||||
L_NUM9PIC, // 54
|
||||
L_PERCENTPIC, // 55
|
||||
L_APIC, // 56
|
||||
L_BPIC, // 57
|
||||
L_CPIC, // 58
|
||||
L_DPIC, // 59
|
||||
L_EPIC, // 60
|
||||
L_FPIC, // 61
|
||||
L_GPIC, // 62
|
||||
L_HPIC, // 63
|
||||
L_IPIC, // 64
|
||||
L_JPIC, // 65
|
||||
L_KPIC, // 66
|
||||
L_LPIC, // 67
|
||||
L_MPIC, // 68
|
||||
L_NPIC, // 69
|
||||
L_OPIC, // 70
|
||||
L_PPIC, // 71
|
||||
L_QPIC, // 72
|
||||
L_RPIC, // 73
|
||||
L_SPIC, // 74
|
||||
L_TPIC, // 75
|
||||
L_UPIC, // 76
|
||||
L_VPIC, // 77
|
||||
L_WPIC, // 78
|
||||
L_XPIC, // 79
|
||||
L_YPIC, // 80
|
||||
L_ZPIC, // 81
|
||||
L_EXPOINTPIC, // 82
|
||||
L_APOSTROPHEPIC, // 83
|
||||
L_GUY2PIC, // 84
|
||||
L_BJWINSPIC, // 85
|
||||
STATUSBARPIC, // 86
|
||||
TITLEPIC, // 87
|
||||
PG13PIC, // 88
|
||||
CREDITSPIC, // 89
|
||||
HIGHSCORESPIC, // 90
|
||||
// Lump Start
|
||||
KNIFEPIC, // 91
|
||||
GUNPIC, // 92
|
||||
MACHINEGUNPIC, // 93
|
||||
GATLINGGUNPIC, // 94
|
||||
NOKEYPIC, // 95
|
||||
GOLDKEYPIC, // 96
|
||||
SILVERKEYPIC, // 97
|
||||
N_BLANKPIC, // 98
|
||||
N_0PIC, // 99
|
||||
N_1PIC, // 100
|
||||
N_2PIC, // 101
|
||||
N_3PIC, // 102
|
||||
N_4PIC, // 103
|
||||
N_5PIC, // 104
|
||||
N_6PIC, // 105
|
||||
N_7PIC, // 106
|
||||
N_8PIC, // 107
|
||||
N_9PIC, // 108
|
||||
FACE1APIC, // 109
|
||||
FACE1BPIC, // 110
|
||||
FACE1CPIC, // 111
|
||||
FACE2APIC, // 112
|
||||
FACE2BPIC, // 113
|
||||
FACE2CPIC, // 114
|
||||
FACE3APIC, // 115
|
||||
FACE3BPIC, // 116
|
||||
FACE3CPIC, // 117
|
||||
FACE4APIC, // 118
|
||||
FACE4BPIC, // 119
|
||||
FACE4CPIC, // 120
|
||||
FACE5APIC, // 121
|
||||
FACE5BPIC, // 122
|
||||
FACE5CPIC, // 123
|
||||
FACE6APIC, // 124
|
||||
FACE6BPIC, // 125
|
||||
FACE6CPIC, // 126
|
||||
FACE7APIC, // 127
|
||||
FACE7BPIC, // 128
|
||||
FACE7CPIC, // 129
|
||||
FACE8APIC, // 130
|
||||
GOTGATLINGPIC, // 131
|
||||
MUTANTBJPIC, // 132
|
||||
PAUSEDPIC, // 133
|
||||
GETPSYCHEDPIC, // 134
|
||||
|
||||
ORDERSCREEN=136,
|
||||
ERRORSCREEN, // 137
|
||||
T_HELPART, // 138
|
||||
T_DEMO0, // 139
|
||||
T_DEMO1, // 140
|
||||
T_DEMO2, // 141
|
||||
T_DEMO3, // 142
|
||||
T_ENDART1, // 143
|
||||
T_ENDART2, // 144
|
||||
T_ENDART3, // 145
|
||||
T_ENDART4, // 146
|
||||
T_ENDART5, // 147
|
||||
T_ENDART6, // 148
|
||||
ENUMEND
|
||||
|
||||
} graphicnums;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// Lump Start
|
||||
SDM_C_BACKDROPPIC = 3,
|
||||
SDM_C_MOUSELBACKPIC, // 4
|
||||
SDM_C_CURSOR1PIC, // 5
|
||||
SDM_C_CURSOR2PIC, // 6
|
||||
SDM_C_NOTSELECTEDPIC, // 7
|
||||
SDM_C_SELECTEDPIC, // 8
|
||||
// Lump Start
|
||||
SDM_C_CUSTOMIZEPIC, // 9
|
||||
SDM_C_JOY1PIC, // 10
|
||||
SDM_C_JOY2PIC, // 11
|
||||
SDM_C_MOUSEPIC, // 12
|
||||
SDM_C_JOYSTICKPIC, // 13
|
||||
SDM_C_KEYBOARDPIC, // 14
|
||||
SDM_C_CONTROLPIC, // 15
|
||||
// Lump Start
|
||||
SDM_C_OPTIONSPIC, // 16
|
||||
// Lump Start
|
||||
SDM_C_FXTITLEPIC, // 17
|
||||
SDM_C_DIGITITLEPIC, // 18
|
||||
SDM_C_MUSICTITLEPIC, // 19
|
||||
// Lump Start
|
||||
SDM_C_HOWTOUGHPIC, // 20
|
||||
SDM_C_BABYMODEPIC, // 21
|
||||
SDM_C_EASYPIC, // 22
|
||||
SDM_C_NORMALPIC, // 23
|
||||
SDM_C_HARDPIC, // 24
|
||||
// Lump Start
|
||||
SDM_C_DISKLOADING1PIC, // 25
|
||||
SDM_C_DISKLOADING2PIC, // 26
|
||||
SDM_C_LOADGAMEPIC, // 27
|
||||
SDM_C_SAVEGAMEPIC, // 28
|
||||
// Lump Start
|
||||
SDM_HIGHSCORESPIC, // 29
|
||||
SDM_C_WONSPEARPIC, // 30
|
||||
// Lump Start
|
||||
SDM_L_GUYPIC, // 31
|
||||
SDM_L_COLONPIC, // 32
|
||||
SDM_L_NUM0PIC, // 33
|
||||
SDM_L_NUM1PIC, // 34
|
||||
SDM_L_NUM2PIC, // 35
|
||||
SDM_L_NUM3PIC, // 36
|
||||
SDM_L_NUM4PIC, // 37
|
||||
SDM_L_NUM5PIC, // 38
|
||||
SDM_L_NUM6PIC, // 39
|
||||
SDM_L_NUM7PIC, // 40
|
||||
SDM_L_NUM8PIC, // 41
|
||||
SDM_L_NUM9PIC, // 42
|
||||
SDM_L_PERCENTPIC, // 43
|
||||
SDM_L_APIC, // 44
|
||||
SDM_L_BPIC, // 45
|
||||
SDM_L_CPIC, // 46
|
||||
SDM_L_DPIC, // 47
|
||||
SDM_L_EPIC, // 48
|
||||
SDM_L_FPIC, // 49
|
||||
SDM_L_GPIC, // 50
|
||||
SDM_L_HPIC, // 51
|
||||
SDM_L_IPIC, // 52
|
||||
SDM_L_JPIC, // 53
|
||||
SDM_L_KPIC, // 54
|
||||
SDM_L_LPIC, // 55
|
||||
SDM_L_MPIC, // 56
|
||||
SDM_L_NPIC, // 57
|
||||
SDM_L_OPIC, // 58
|
||||
SDM_L_PPIC, // 59
|
||||
SDM_L_QPIC, // 60
|
||||
SDM_L_RPIC, // 61
|
||||
SDM_L_SPIC, // 62
|
||||
SDM_L_TPIC, // 63
|
||||
SDM_L_UPIC, // 64
|
||||
SDM_L_VPIC, // 65
|
||||
SDM_L_WPIC, // 66
|
||||
SDM_L_XPIC, // 67
|
||||
SDM_L_YPIC, // 68
|
||||
SDM_L_ZPIC, // 69
|
||||
SDM_L_EXPOINTPIC, // 70
|
||||
SDM_L_APOSTROPHEPIC, // 71
|
||||
SDM_L_GUY2PIC, // 72
|
||||
SDM_L_BJWINSPIC, // 73
|
||||
// Lump Start
|
||||
SDM_TITLE1PIC, // 74
|
||||
SDM_TITLE2PIC, // 75
|
||||
SDM_STATUSBARPIC, // 76
|
||||
SDM_PG13PIC, // 77
|
||||
SDM_CREDITSPIC, // 78
|
||||
// Lump Start
|
||||
SDM_KNIFEPIC, // 79
|
||||
SDM_GUNPIC, // 80
|
||||
SDM_MACHINEGUNPIC, // 81
|
||||
SDM_GATLINGGUNPIC, // 82
|
||||
SDM_NOKEYPIC, // 83
|
||||
SDM_GOLDKEYPIC, // 84
|
||||
SDM_SILVERKEYPIC, // 85
|
||||
SDM_N_BLANKPIC, // 86
|
||||
SDM_N_0PIC, // 87
|
||||
SDM_N_1PIC, // 88
|
||||
SDM_N_2PIC, // 89
|
||||
SDM_N_3PIC, // 90
|
||||
SDM_N_4PIC, // 91
|
||||
SDM_N_5PIC, // 92
|
||||
SDM_N_6PIC, // 93
|
||||
SDM_N_7PIC, // 94
|
||||
SDM_N_8PIC, // 95
|
||||
SDM_N_9PIC, // 96
|
||||
SDM_FACE1APIC, // 97
|
||||
SDM_FACE1BPIC, // 98
|
||||
SDM_FACE1CPIC, // 99
|
||||
SDM_FACE2APIC, // 100
|
||||
SDM_FACE2BPIC, // 101
|
||||
SDM_FACE2CPIC, // 102
|
||||
SDM_FACE3APIC, // 103
|
||||
SDM_FACE3BPIC, // 104
|
||||
SDM_FACE3CPIC, // 105
|
||||
SDM_FACE4APIC, // 106
|
||||
SDM_FACE4BPIC, // 107
|
||||
SDM_FACE4CPIC, // 108
|
||||
SDM_FACE5APIC, // 109
|
||||
SDM_FACE5BPIC, // 110
|
||||
SDM_FACE5CPIC, // 111
|
||||
SDM_FACE6APIC, // 112
|
||||
SDM_FACE6BPIC, // 113
|
||||
SDM_FACE6CPIC, // 114
|
||||
SDM_FACE7APIC, // 115
|
||||
SDM_FACE7BPIC, // 116
|
||||
SDM_FACE7CPIC, // 117
|
||||
SDM_FACE8APIC, // 118
|
||||
SDM_GOTGATLINGPIC, // 119
|
||||
SDM_GODMODEFACE1PIC, // 120
|
||||
SDM_GODMODEFACE2PIC, // 121
|
||||
SDM_GODMODEFACE3PIC, // 122
|
||||
SDM_BJWAITING1PIC, // 123
|
||||
SDM_BJWAITING2PIC, // 124
|
||||
SDM_BJOUCHPIC, // 125
|
||||
SDM_PAUSEDPIC, // 126
|
||||
SDM_GETPSYCHEDPIC, // 127
|
||||
|
||||
|
||||
|
||||
SDM_ORDERSCREEN = 129,
|
||||
SDM_ERRORSCREEN, // 130
|
||||
SDM_TITLEPALETTE, // 131
|
||||
SDM_T_DEMO0, // 132
|
||||
|
||||
SDM_ENUMEND
|
||||
|
||||
} sdm_graphicnums;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
// Lump Start
|
||||
SOD_C_BACKDROPPIC = 3,
|
||||
SOD_C_MOUSELBACKPIC, // 4
|
||||
SOD_C_CURSOR1PIC, // 5
|
||||
SOD_C_CURSOR2PIC, // 6
|
||||
SOD_C_NOTSELECTEDPIC, // 7
|
||||
SOD_C_SELECTEDPIC, // 8
|
||||
// Lump Start
|
||||
SOD_C_CUSTOMIZEPIC, // 9
|
||||
SOD_C_JOY1PIC, // 10
|
||||
SOD_C_JOY2PIC, // 11
|
||||
SOD_C_MOUSEPIC, // 12
|
||||
SOD_C_JOYSTICKPIC, // 13
|
||||
SOD_C_KEYBOARDPIC, // 14
|
||||
SOD_C_CONTROLPIC, // 15
|
||||
// Lump Start
|
||||
SOD_C_OPTIONSPIC, // 16
|
||||
// Lump Start
|
||||
SOD_C_FXTITLEPIC, // 17
|
||||
SOD_C_DIGITITLEPIC, // 18
|
||||
SOD_C_MUSICTITLEPIC, // 19
|
||||
// Lump Start
|
||||
SOD_C_HOWTOUGHPIC, // 20
|
||||
SOD_C_BABYMODEPIC, // 21
|
||||
SOD_C_EASYPIC, // 22
|
||||
SOD_C_NORMALPIC, // 23
|
||||
SOD_C_HARDPIC, // 24
|
||||
// Lump Start
|
||||
SOD_C_DISKLOADING1PIC, // 25
|
||||
SOD_C_DISKLOADING2PIC, // 26
|
||||
SOD_C_LOADGAMEPIC, // 27
|
||||
SOD_C_SAVEGAMEPIC, // 28
|
||||
// Lump Start
|
||||
SOD_HIGHSCORESPIC, // 29
|
||||
SOD_C_WONSPEARPIC, // 30
|
||||
// Lump Start
|
||||
SOD_BJCOLLAPSE1PIC, // 31
|
||||
SOD_BJCOLLAPSE2PIC, // 32
|
||||
SOD_BJCOLLAPSE3PIC, // 33
|
||||
SOD_BJCOLLAPSE4PIC, // 34
|
||||
SOD_ENDPICPIC, // 35
|
||||
// Lump Start
|
||||
SOD_L_GUYPIC, // 36
|
||||
SOD_L_COLONPIC, // 37
|
||||
SOD_L_NUM0PIC, // 38
|
||||
SOD_L_NUM1PIC, // 39
|
||||
SOD_L_NUM2PIC, // 40
|
||||
SOD_L_NUM3PIC, // 41
|
||||
SOD_L_NUM4PIC, // 42
|
||||
SOD_L_NUM5PIC, // 43
|
||||
SOD_L_NUM6PIC, // 44
|
||||
SOD_L_NUM7PIC, // 45
|
||||
SOD_L_NUM8PIC, // 46
|
||||
SOD_L_NUM9PIC, // 47
|
||||
SOD_L_PERCENTPIC, // 48
|
||||
SOD_L_APIC, // 49
|
||||
SOD_L_BPIC, // 50
|
||||
SOD_L_CPIC, // 51
|
||||
SOD_L_DPIC, // 52
|
||||
SOD_L_EPIC, // 53
|
||||
SOD_L_FPIC, // 54
|
||||
SOD_L_GPIC, // 55
|
||||
SOD_L_HPIC, // 56
|
||||
SOD_L_IPIC, // 57
|
||||
SOD_L_JPIC, // 58
|
||||
SOD_L_KPIC, // 59
|
||||
SOD_L_LPIC, // 60
|
||||
SOD_L_MPIC, // 61
|
||||
SOD_L_NPIC, // 62
|
||||
SOD_L_OPIC, // 63
|
||||
SOD_L_PPIC, // 64
|
||||
SOD_L_QPIC, // 65
|
||||
SOD_L_RPIC, // 66
|
||||
SOD_L_SPIC, // 67
|
||||
SOD_L_TPIC, // 68
|
||||
SOD_L_UPIC, // 69
|
||||
SOD_L_VPIC, // 70
|
||||
SOD_L_WPIC, // 71
|
||||
SOD_L_XPIC, // 72
|
||||
SOD_L_YPIC, // 73
|
||||
SOD_L_ZPIC, // 74
|
||||
SOD_L_EXPOINTPIC, // 75
|
||||
SOD_L_APOSTROPHEPIC, // 76
|
||||
SOD_L_GUY2PIC, // 77
|
||||
SOD_L_BJWINSPIC, // 78
|
||||
// Lump Start
|
||||
SOD_TITLE1PIC, // 79
|
||||
SOD_TITLE2PIC, // 80
|
||||
// Lump Start
|
||||
SOD_ENDSCREEN11PIC, // 81
|
||||
// Lump Start
|
||||
SOD_ENDSCREEN12PIC, // 82
|
||||
SOD_ENDSCREEN3PIC, // 83
|
||||
SOD_ENDSCREEN4PIC, // 84
|
||||
SOD_ENDSCREEN5PIC, // 85
|
||||
SOD_ENDSCREEN6PIC, // 86
|
||||
SOD_ENDSCREEN7PIC, // 87
|
||||
SOD_ENDSCREEN8PIC, // 88
|
||||
SOD_ENDSCREEN9PIC, // 89
|
||||
SOD_STATUSBARPIC, // 90
|
||||
SOD_PG13PIC, // 91
|
||||
SOD_CREDITSPIC, // 92
|
||||
// Lump Start
|
||||
SOD_IDGUYS1PIC, // 93
|
||||
SOD_IDGUYS2PIC, // 94
|
||||
// Lump Start
|
||||
SOD_COPYPROTTOPPIC, // 95
|
||||
SOD_COPYPROTBOXPIC, // 96
|
||||
SOD_BOSSPIC1PIC, // 97
|
||||
SOD_BOSSPIC2PIC, // 98
|
||||
SOD_BOSSPIC3PIC, // 99
|
||||
SOD_BOSSPIC4PIC, // 100
|
||||
// Lump Start
|
||||
SOD_KNIFEPIC, // 101
|
||||
SOD_GUNPIC, // 102
|
||||
SOD_MACHINEGUNPIC, // 103
|
||||
SOD_GATLINGGUNPIC, // 104
|
||||
SOD_NOKEYPIC, // 105
|
||||
SOD_GOLDKEYPIC, // 106
|
||||
SOD_SILVERKEYPIC, // 107
|
||||
SOD_N_BLANKPIC, // 108
|
||||
SOD_N_0PIC, // 109
|
||||
SOD_N_1PIC, // 110
|
||||
SOD_N_2PIC, // 111
|
||||
SOD_N_3PIC, // 112
|
||||
SOD_N_4PIC, // 113
|
||||
SOD_N_5PIC, // 114
|
||||
SOD_N_6PIC, // 115
|
||||
SOD_N_7PIC, // 116
|
||||
SOD_N_8PIC, // 117
|
||||
SOD_N_9PIC, // 118
|
||||
SOD_FACE1APIC, // 119
|
||||
SOD_FACE1BPIC, // 120
|
||||
SOD_FACE1CPIC, // 121
|
||||
SOD_FACE2APIC, // 122
|
||||
SOD_FACE2BPIC, // 123
|
||||
SOD_FACE2CPIC, // 124
|
||||
SOD_FACE3APIC, // 125
|
||||
SOD_FACE3BPIC, // 126
|
||||
SOD_FACE3CPIC, // 127
|
||||
SOD_FACE4APIC, // 128
|
||||
SOD_FACE4BPIC, // 129
|
||||
SOD_FACE4CPIC, // 130
|
||||
SOD_FACE5APIC, // 131
|
||||
SOD_FACE5BPIC, // 132
|
||||
SOD_FACE5CPIC, // 133
|
||||
SOD_FACE6APIC, // 134
|
||||
SOD_FACE6BPIC, // 135
|
||||
SOD_FACE6CPIC, // 136
|
||||
SOD_FACE7APIC, // 137
|
||||
SOD_FACE7BPIC, // 138
|
||||
SOD_FACE7CPIC, // 139
|
||||
SOD_FACE8APIC, // 140
|
||||
SOD_GOTGATLINGPIC, // 141
|
||||
SOD_GODMODEFACE1PIC, // 142
|
||||
SOD_GODMODEFACE2PIC, // 143
|
||||
SOD_GODMODEFACE3PIC, // 144
|
||||
SOD_BJWAITING1PIC, // 145
|
||||
SOD_BJWAITING2PIC, // 146
|
||||
SOD_BJOUCHPIC, // 147
|
||||
SOD_PAUSEDPIC, // 148
|
||||
SOD_GETPSYCHEDPIC, // 149
|
||||
|
||||
SOD_ORDERSCREEN = 151,
|
||||
SOD_ERRORSCREEN, // 152
|
||||
SOD_TITLEPALETTE, // 153
|
||||
SOD_END1PALETTE, // 154
|
||||
SOD_END2PALETTE, // 155
|
||||
SOD_END3PALETTE, // 156
|
||||
SOD_END4PALETTE, // 157
|
||||
SOD_END5PALETTE, // 158
|
||||
SOD_END6PALETTE, // 159
|
||||
SOD_END7PALETTE, // 160
|
||||
SOD_END8PALETTE, // 161
|
||||
SOD_END9PALETTE, // 162
|
||||
SOD_IDGUYSPALETTE, // 163
|
||||
SOD_T_DEMO0, // 164
|
||||
SOD_T_DEMO1, // 165
|
||||
SOD_T_DEMO2, // 166
|
||||
SOD_T_DEMO3, // 167
|
||||
SOD_T_ENDART1, // 168
|
||||
SOD_ENUMEND
|
||||
|
||||
} sod_graphicnums;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CORNER_MUS, // 0
|
||||
DUNGEON_MUS, // 1
|
||||
WARMARCH_MUS, // 2
|
||||
GETTHEM_MUS, // 3
|
||||
HEADACHE_MUS, // 4
|
||||
HITLWLTZ_MUS, // 5
|
||||
INTROCW3_MUS, // 6
|
||||
NAZI_NOR_MUS, // 7
|
||||
NAZI_OMI_MUS, // 8
|
||||
POW_MUS, // 9
|
||||
SALUTE_MUS, // 10
|
||||
SEARCHN_MUS, // 11
|
||||
SUSPENSE_MUS, // 12
|
||||
VICTORS_MUS, // 13
|
||||
WONDERIN_MUS, // 14
|
||||
FUNKYOU_MUS, // 15
|
||||
ENDLEVEL_MUS, // 16
|
||||
GOINGAFT_MUS, // 17
|
||||
PREGNANT_MUS, // 18
|
||||
ULTIMATE_MUS, // 19
|
||||
NAZI_RAP_MUS, // 20
|
||||
ZEROHOUR_MUS, // 21
|
||||
TWELFTH_MUS, // 22
|
||||
ROSTER_MUS, // 23
|
||||
URAHERO_MUS, // 24
|
||||
VICMARCH_MUS, // 25
|
||||
PACMAN_MUS, // 26
|
||||
LASTMUSIC
|
||||
|
||||
} wl6_musicnames;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SOD_XFUNKIE_MUS, // 0
|
||||
SOD_DUNGEON_MUS, // 1
|
||||
SOD_XDEATH_MUS, // 2
|
||||
SOD_GETTHEM_MUS, // 3
|
||||
SOD_XTIPTOE_MUS, // 4
|
||||
SOD_GOINGAFT_MUS, // 5
|
||||
SOD_URAHERO_MUS, // 6
|
||||
SOD_XTHEEND_MUS, // 7
|
||||
SOD_NAZI_OMI_MUS, // 8
|
||||
SOD_POW_MUS, // 9
|
||||
SOD_TWELFTH_MUS, // 10
|
||||
SOD_SEARCHN_MUS, // 11
|
||||
SOD_SUSPENSE_MUS, // 12
|
||||
SOD_ZEROHOUR_MUS, // 13
|
||||
SOD_WONDERIN_MUS, // 14
|
||||
SOD_ULTIMATE_MUS, // 15
|
||||
SOD_ENDLEVEL_MUS, // 16
|
||||
SOD_XEVIL_MUS, // 17
|
||||
SOD_XJAZNAZI_MUS, // 18
|
||||
SOD_COPYPRO_MUS, // 19
|
||||
SOD_XAWARD_MUS, // 20
|
||||
SOD_XPUTIT_MUS, // 21
|
||||
SOD_XGETYOU_MUS, // 22
|
||||
SOD_XTOWER2_MUS, // 23
|
||||
SOD_LASTMUSIC
|
||||
|
||||
} sod_musicnames;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// WL1
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// Data LUMPs
|
||||
//
|
||||
#define WL1_README_LUMP_START 3
|
||||
#define WL1_README_LUMP_END 25
|
||||
|
||||
#define WL1_CONTROLS_LUMP_START 26
|
||||
#define WL1_CONTROLS_LUMP_END 52
|
||||
|
||||
#define WL1_LEVELEND_LUMP_START 53
|
||||
#define WL1_LEVELEND_LUMP_END 93
|
||||
|
||||
#define WL1_LATCHPICS_LUMP_START 99
|
||||
#define WL1_LATCHPICS_LUMP_END 141
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// WL6
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
//
|
||||
// Data LUMPs
|
||||
//
|
||||
#define WL6_README_LUMP_START 3
|
||||
#define WL6_README_LUMP_END 9
|
||||
|
||||
#define WL6_CONTROLS_LUMP_START 10
|
||||
#define WL6_CONTROLS_LUMP_END 42
|
||||
|
||||
#define WL6_LEVELEND_LUMP_START 43
|
||||
#define WL6_LEVELEND_LUMP_END 85
|
||||
|
||||
#define WL6_LATCHPICS_LUMP_START 91
|
||||
#define WL6_LATCHPICS_LUMP_END 134
|
||||
|
||||
|
||||
//
|
||||
// Amount of each data item
|
||||
//
|
||||
#define NUMFONT 2
|
||||
#define NUMFONTM 0
|
||||
#define NUMPICM 0
|
||||
#define NUMSPRITES 0
|
||||
#define NUMTILE8 72
|
||||
#define NUMTILE8M 0
|
||||
#define NUMTILE16 0
|
||||
#define NUMTILE16M 0
|
||||
#define NUMTILE32 0
|
||||
#define NUMTILE32M 0
|
||||
#define NUMEXTERNS 13
|
||||
//
|
||||
// File offsets for data items
|
||||
//
|
||||
#define STRUCTPIC 0
|
||||
|
||||
#define STARTFONT 1
|
||||
#define STARTFONTM 3
|
||||
#define STARTPICS 3
|
||||
#define STARTPICM 135
|
||||
#define STARTSPRITES 135
|
||||
#define STARTTILE8 135
|
||||
#define STARTTILE8M 136
|
||||
#define STARTTILE16 136
|
||||
#define STARTTILE16M 136
|
||||
#define STARTTILE32 136
|
||||
#define STARTTILE32M 136
|
||||
#define STARTEXTERNS 136
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Spear of Destiny
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//
|
||||
// Amount of each data item
|
||||
//
|
||||
#define NUMCHUNKS 169
|
||||
#define NUMPICS 147
|
||||
#define SOD_NUMEXTERNS 18
|
||||
//
|
||||
// File offsets for data items
|
||||
//
|
||||
|
||||
#define SOD_STARTDIFF 15
|
||||
|
||||
//// End SOD
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern _boolean LumpExtractor( const char *fextension, W32 limit, W16 version );
|
||||
extern _boolean PExtractor( const char *extension, W16 version );
|
||||
extern _boolean AudioRipper( const char *fextension, W32 start, W32 end, W16 version );
|
||||
|
||||
extern _boolean MapRipper( const char *fextension, W16 version );
|
||||
|
||||
|
||||
|
||||
extern char *GetMusicFileName_WL6( W32 chunk );
|
||||
extern char *GetMusicFileName_SOD( W32 chunk );
|
||||
|
||||
|
||||
extern char *GetLumpFileName_WL1( W32 chunk );
|
||||
extern char *GetLumpFileName_WL6( W32 chunk );
|
||||
extern char *GetLumpFileName_SDM( W32 chunk );
|
||||
extern char *GetLumpFileName_SOD( W32 chunk );
|
||||
|
||||
|
||||
#endif /* __WOLF_DEF_H__ */
|
||||
|
||||
1707
wolf3d/wolfextractor/wolf/wolf_gfx.c
Normal file
1707
wolf3d/wolfextractor/wolf/wolf_gfx.c
Normal file
File diff suppressed because it is too large
Load Diff
692
wolf3d/wolfextractor/wolf/wolf_map.c
Normal file
692
wolf3d/wolfextractor/wolf/wolf_map.c
Normal file
@@ -0,0 +1,692 @@
|
||||
/*
|
||||
|
||||
Copyright (C) 2004-2005 Michael Liebscher
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* wolf_map.c: Decode Wolfenstein 3-D Map data.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
* Date: 2004
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Wolfenstein 3-D, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "wolf_def.h"
|
||||
|
||||
#include "../string/com_string.h"
|
||||
#include "../loaders/tga.h"
|
||||
#include "../filesys/file.h"
|
||||
#include "../../../common/arch.h"
|
||||
#include "../memory/memory.h"
|
||||
#include "../../../common/common_utils.h"
|
||||
|
||||
|
||||
#define MAPHEADNAME "MAPHEAD"
|
||||
#define MAPNAME "GAMEMAPS"
|
||||
|
||||
|
||||
|
||||
PRIVATE FILE *maphandle;
|
||||
|
||||
|
||||
PRIVATE W32 headeroffsets[ 100 ];
|
||||
PRIVATE W32 TotalMaps;
|
||||
PRIVATE W16 RLEWtag;
|
||||
|
||||
PRIVATE W16 gameversion;
|
||||
|
||||
|
||||
PRIVATE const W32 vgaCeilingWL6[] =
|
||||
{
|
||||
0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0xbfbf,
|
||||
0x4e4e,0x4e4e,0x4e4e,0x1d1d,0x8d8d,0x4e4e,0x1d1d,0x2d2d,0x1d1d,0x8d8d,
|
||||
0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x1d1d,0x2d2d,0xdddd,0x1d1d,0x1d1d,0x9898,
|
||||
|
||||
0x1d1d,0x9d9d,0x2d2d,0xdddd,0xdddd,0x9d9d,0x2d2d,0x4d4d,0x1d1d,0xdddd,
|
||||
0x7d7d,0x1d1d,0x2d2d,0x2d2d,0xdddd,0xd7d7,0x1d1d,0x1d1d,0x1d1d,0x2d2d,
|
||||
0x1d1d,0x1d1d,0x1d1d,0x1d1d,0xdddd,0xdddd,0x7d7d,0xdddd,0xdddd,0xdddd
|
||||
};
|
||||
|
||||
PRIVATE const W32 vgaCeilingSOD[] =
|
||||
{
|
||||
0x6f6f,0x4f4f,0x1d1d,0xdede,0xdfdf,0x2e2e,0x7f7f,0x9e9e,0xaeae,0x7f7f,
|
||||
0x1d1d,0xdede,0xdfdf,0xdede,0xdfdf,0xdede,0xe1e1,0xdcdc,0x2e2e,0x1d1d,0xdcdc
|
||||
};
|
||||
|
||||
PRIVATE W32 WL6_songs[] =
|
||||
{
|
||||
//
|
||||
// Episode One
|
||||
//
|
||||
GETTHEM_MUS,
|
||||
SEARCHN_MUS,
|
||||
POW_MUS,
|
||||
SUSPENSE_MUS,
|
||||
GETTHEM_MUS,
|
||||
SEARCHN_MUS,
|
||||
POW_MUS,
|
||||
SUSPENSE_MUS,
|
||||
|
||||
WARMARCH_MUS, // Boss level
|
||||
CORNER_MUS, // Secret level
|
||||
|
||||
//
|
||||
// Episode Two
|
||||
//
|
||||
NAZI_OMI_MUS,
|
||||
PREGNANT_MUS,
|
||||
GOINGAFT_MUS,
|
||||
HEADACHE_MUS,
|
||||
NAZI_OMI_MUS,
|
||||
PREGNANT_MUS,
|
||||
HEADACHE_MUS,
|
||||
GOINGAFT_MUS,
|
||||
|
||||
WARMARCH_MUS, // Boss level
|
||||
DUNGEON_MUS, // Secret level
|
||||
|
||||
//
|
||||
// Episode Three
|
||||
//
|
||||
INTROCW3_MUS,
|
||||
NAZI_RAP_MUS,
|
||||
TWELFTH_MUS,
|
||||
ZEROHOUR_MUS,
|
||||
INTROCW3_MUS,
|
||||
NAZI_RAP_MUS,
|
||||
TWELFTH_MUS,
|
||||
ZEROHOUR_MUS,
|
||||
|
||||
ULTIMATE_MUS, // Boss level
|
||||
PACMAN_MUS, // Secret level
|
||||
|
||||
//
|
||||
// Episode Four
|
||||
//
|
||||
GETTHEM_MUS,
|
||||
SEARCHN_MUS,
|
||||
POW_MUS,
|
||||
SUSPENSE_MUS,
|
||||
GETTHEM_MUS,
|
||||
SEARCHN_MUS,
|
||||
POW_MUS,
|
||||
SUSPENSE_MUS,
|
||||
|
||||
WARMARCH_MUS, // Boss level
|
||||
CORNER_MUS, // Secret level
|
||||
|
||||
//
|
||||
// Episode Five
|
||||
//
|
||||
NAZI_OMI_MUS,
|
||||
PREGNANT_MUS,
|
||||
GOINGAFT_MUS,
|
||||
HEADACHE_MUS,
|
||||
NAZI_OMI_MUS,
|
||||
PREGNANT_MUS,
|
||||
HEADACHE_MUS,
|
||||
GOINGAFT_MUS,
|
||||
|
||||
WARMARCH_MUS, // Boss level
|
||||
DUNGEON_MUS, // Secret level
|
||||
|
||||
//
|
||||
// Episode Six
|
||||
//
|
||||
INTROCW3_MUS,
|
||||
NAZI_RAP_MUS,
|
||||
TWELFTH_MUS,
|
||||
ZEROHOUR_MUS,
|
||||
INTROCW3_MUS,
|
||||
NAZI_RAP_MUS,
|
||||
TWELFTH_MUS,
|
||||
ZEROHOUR_MUS,
|
||||
|
||||
ULTIMATE_MUS, // Boss level
|
||||
FUNKYOU_MUS // Secret level
|
||||
};
|
||||
|
||||
|
||||
PRIVATE W32 SOD_songs[] =
|
||||
{
|
||||
SOD_XTIPTOE_MUS,
|
||||
SOD_XFUNKIE_MUS,
|
||||
SOD_XDEATH_MUS,
|
||||
SOD_XGETYOU_MUS, // DON'T KNOW
|
||||
SOD_ULTIMATE_MUS, // Trans Grosse
|
||||
|
||||
SOD_DUNGEON_MUS,
|
||||
SOD_GOINGAFT_MUS,
|
||||
SOD_POW_MUS,
|
||||
SOD_TWELFTH_MUS,
|
||||
SOD_ULTIMATE_MUS, // Barnacle Wilhelm BOSS
|
||||
|
||||
SOD_NAZI_OMI_MUS,
|
||||
SOD_GETTHEM_MUS,
|
||||
SOD_SUSPENSE_MUS,
|
||||
SOD_SEARCHN_MUS,
|
||||
SOD_ZEROHOUR_MUS,
|
||||
SOD_ULTIMATE_MUS, // Super Mutant BOSS
|
||||
|
||||
SOD_XPUTIT_MUS,
|
||||
SOD_ULTIMATE_MUS, // Death Knight BOSS
|
||||
|
||||
SOD_XJAZNAZI_MUS, // Secret level
|
||||
SOD_XFUNKIE_MUS, // Secret level (DON'T KNOW)
|
||||
|
||||
SOD_XEVIL_MUS // Angel of Death BOSS
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float time;
|
||||
char timestr[ 6 ];
|
||||
|
||||
} times;
|
||||
|
||||
|
||||
PRIVATE times parTimesWL6[] =
|
||||
{
|
||||
//
|
||||
// Episode One Par Times
|
||||
//
|
||||
{ 1.5, "01:30" },
|
||||
{ 2, "02:00" },
|
||||
{ 2, "02:00" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 3, "03:00" },
|
||||
{ 3, "03:00" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 0, "??:??" }, // Boss level
|
||||
{ 0, "??:??" }, // Secret level
|
||||
|
||||
//
|
||||
// Episode Two Par Times
|
||||
//
|
||||
{ 1.5, "01:30" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 3, "03:00" },
|
||||
{ 2, "02:00" },
|
||||
{ 4, "04:00" },
|
||||
{ 6, "06:00" },
|
||||
{ 1, "01:00" },
|
||||
{ 3, "03:00" },
|
||||
{ 0, "??:??" },
|
||||
{ 0, "??:??" },
|
||||
|
||||
//
|
||||
// Episode Three Par Times
|
||||
//
|
||||
{ 1.5, "01:30" },
|
||||
{ 1.5, "01:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 2, "02:00" },
|
||||
{ 6, "06:00" },
|
||||
{ 0, "??:??" },
|
||||
{ 0, "??:??" },
|
||||
|
||||
//
|
||||
// Episode Four Par Times
|
||||
//
|
||||
{ 2, "02:00" },
|
||||
{ 2, "02:00" },
|
||||
{ 1.5, "01:30" },
|
||||
{ 1, "01:00" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 2, "02:00" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 0, "??:??" },
|
||||
{ 0, "??:??" },
|
||||
|
||||
//
|
||||
// Episode Five Par Times
|
||||
//
|
||||
{ 2.5, "02:30" },
|
||||
{ 1.5, "01:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 2.5, "02:30" },
|
||||
{ 4, "04:00" },
|
||||
{ 3, "03:00" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 0, "??:??" },
|
||||
{ 0, "??:??" },
|
||||
|
||||
//
|
||||
// Episode Six Par Times
|
||||
//
|
||||
{ 6.5, "06:30" },
|
||||
{ 4, "04:00" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 6, "06:00" },
|
||||
{ 5, "05:00" },
|
||||
{ 5.5, "05:30" },
|
||||
{ 5.5, "05:30" },
|
||||
{ 8.5, "08:30" },
|
||||
{ 0, "??:??" },
|
||||
{ 0, "??:??" }
|
||||
};
|
||||
|
||||
PRIVATE times parTimesSOD[] =
|
||||
{
|
||||
//
|
||||
// SPEAR OF DESTINY TIMES
|
||||
//
|
||||
{ 1.5, "01:30" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 2.75,"02:45" },
|
||||
{ 3.5, "03:30" },
|
||||
{ 0, "??:??" }, // Boss 1
|
||||
{ 4.5, "04:30" },
|
||||
{ 3.25,"03:15" },
|
||||
{ 2.75,"02:45" },
|
||||
{ 4.75,"04:45" },
|
||||
{ 0, "??:??" }, // Boss 2
|
||||
{ 6.5, "06:30" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 2.75,"02:45" },
|
||||
{ 4.5, "04:30" },
|
||||
{ 6, "06:00" },
|
||||
{ 0, "??:??" }, // Boss 3
|
||||
{ 6, "06:00" },
|
||||
{ 0, "??:??" }, // Boss 4
|
||||
{ 0, "??:??" }, // Secret level 1
|
||||
{ 0, "??:??" }, // Secret level 2
|
||||
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CAL_SetupMapFile -Setup map files for decoding.
|
||||
|
||||
Parameters: extension -[in] file extension for map data files.
|
||||
|
||||
Returns: Non-zero on success, zero otherwise.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 CAL_SetupMapFile( const char *extension )
|
||||
{
|
||||
FILE *handle;
|
||||
SW32 length;
|
||||
char fname[ 13 ];
|
||||
|
||||
|
||||
//
|
||||
// load maphead.xxx (offsets and tileinfo for map file)
|
||||
//
|
||||
cs_strlcpy( fname, MAPHEADNAME, sizeof( fname ) );
|
||||
cs_strlcat( fname, extension, sizeof( fname ) );
|
||||
|
||||
handle = fopen( cs_strupr( fname ), "rb" );
|
||||
if( handle == NULL )
|
||||
{
|
||||
handle = fopen( cs_strlwr( fname ), "rb" );
|
||||
if( handle == NULL )
|
||||
{
|
||||
printf( "Could not open file (%s) for read!\n", fname );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
length = FS_FileLength( handle );
|
||||
|
||||
|
||||
fread( &RLEWtag, 2, 1, handle );
|
||||
|
||||
for( TotalMaps = 0 ; TotalMaps < length ; ++TotalMaps )
|
||||
{
|
||||
fread( &headeroffsets[ TotalMaps ], 4, 1, handle );
|
||||
if( ! headeroffsets[ TotalMaps ] )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fclose( handle );
|
||||
|
||||
|
||||
|
||||
cs_strlcpy( fname, MAPNAME, sizeof( fname ) );
|
||||
cs_strlcat( fname, extension, sizeof( fname ) );
|
||||
|
||||
maphandle = fopen( cs_strupr( fname ), "rb");
|
||||
if( NULL == maphandle )
|
||||
{
|
||||
maphandle = fopen( cs_strlwr( fname ), "rb");
|
||||
if( NULL == maphandle )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CAL_ShutdownMapFile -Shutdown map file.
|
||||
|
||||
Parameters: Nothing.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void CAL_ShutdownMapFile( void )
|
||||
{
|
||||
if( maphandle )
|
||||
{
|
||||
fclose( maphandle );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CA_CacheMap -Cache and save map data.
|
||||
|
||||
Parameters:
|
||||
ChunkOffset -[in] Chunk offset.
|
||||
Chunklength -[in] Length of chunk.
|
||||
filename -[in] File name to save map as.
|
||||
index -[in] File name index number.
|
||||
|
||||
Returns: Non-zero on success, otherwise zero.
|
||||
|
||||
Notes:
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 CA_CacheMap( W32 ChunkOffset, W32 Chunklength, const char *filename, W32 index )
|
||||
{
|
||||
W32 offset[ 3 ];
|
||||
W32 offsetin[ 3 ];
|
||||
W32 temp;
|
||||
W16 length[ 3 ];
|
||||
W8 sig[ 5 ];
|
||||
W16 w, h;
|
||||
W8 *data;
|
||||
W32 ceiling;
|
||||
W32 floor;
|
||||
FILE *fout;
|
||||
float ftime;
|
||||
char *stime;
|
||||
char name[ 32 ];
|
||||
char musicName[ 64 ];
|
||||
extern char gamepal[];
|
||||
SW32 jmp;
|
||||
|
||||
if( gameversion == SOD_PAK )
|
||||
{
|
||||
temp = (vgaCeilingSOD[ index ] & 0xff) * 3;
|
||||
ceiling = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2);
|
||||
|
||||
temp = 0x19 * 3;
|
||||
floor = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2);
|
||||
|
||||
ftime = parTimesSOD[ index ].time;
|
||||
stime = parTimesSOD[ index ].timestr;
|
||||
|
||||
cs_snprintf( musicName, sizeof( musicName ), "music/%s.ogg", GetMusicFileName_SOD( SOD_songs[ index ] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = (vgaCeilingWL6[ index ] & 0xff) * 3;
|
||||
ceiling = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2);
|
||||
|
||||
temp = 0x19 * 3;
|
||||
floor = ( (gamepal[ temp ] << 2) << 16 ) | ( (gamepal[ temp+1 ] << 2 ) << 8) | (gamepal[ temp+2 ]<<2);
|
||||
|
||||
ftime = parTimesWL6[ index ].time;
|
||||
stime = parTimesWL6[ index ].timestr;
|
||||
|
||||
cs_snprintf( musicName, sizeof( musicName ), "music/%s.ogg", GetMusicFileName_WL6( WL6_songs[ index ] ) );
|
||||
}
|
||||
|
||||
fout = fopen( filename, "wb");
|
||||
if( NULL == fout )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
fseek( maphandle, ChunkOffset, SEEK_SET );
|
||||
|
||||
|
||||
fread( &offsetin, sizeof( W32 ), 3, maphandle );
|
||||
fread( &length, sizeof( W16 ), 3, maphandle );
|
||||
|
||||
fread( &w, sizeof( W16 ), 1, maphandle );
|
||||
fread( &h, sizeof( W16 ), 1, maphandle );
|
||||
|
||||
|
||||
|
||||
fread( name, sizeof( W8 ), 16, maphandle );
|
||||
fread( sig, sizeof( W8 ), 4, maphandle );
|
||||
|
||||
//
|
||||
// Output header
|
||||
//
|
||||
|
||||
// Map file header signature
|
||||
fwrite( sig, sizeof( W8 ), 4, fout );
|
||||
|
||||
// RLE Word tag
|
||||
fwrite( &RLEWtag, sizeof( W16 ), 1, fout );
|
||||
|
||||
// Max Width
|
||||
fwrite( &w, sizeof( W16 ), 1, fout );
|
||||
|
||||
// Max Height
|
||||
fwrite( &h, sizeof( W16 ), 1, fout );
|
||||
|
||||
// Ceiling Colour
|
||||
fwrite( &ceiling, sizeof( W32 ), 1, fout );
|
||||
|
||||
// Floor Colour
|
||||
fwrite( &floor, sizeof( W32 ), 1, fout );
|
||||
|
||||
// Length of layers
|
||||
temp = length[ 0 ];
|
||||
fwrite( &temp, sizeof( W16 ), 1, fout ); // Length One
|
||||
temp = length[ 1 ];
|
||||
fwrite( &temp, sizeof( W16 ), 1, fout ); // Length Two
|
||||
temp = length[ 2 ];
|
||||
fwrite( &temp, sizeof( W16 ), 1, fout ); // Length Three
|
||||
|
||||
jmp = ftell( fout );
|
||||
|
||||
temp = 0;
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset One
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Two
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Three
|
||||
|
||||
|
||||
// Map name length
|
||||
temp = strlen( name );
|
||||
fwrite( &temp, sizeof( W16 ), 1, fout );
|
||||
|
||||
// Music name length
|
||||
temp = strlen( musicName );
|
||||
fwrite( &temp, sizeof( W16 ), 1, fout );
|
||||
|
||||
// Par time Float
|
||||
fwrite( &ftime, sizeof( float ), 1, fout );
|
||||
|
||||
// Par time string
|
||||
fwrite( stime, sizeof( W8 ), 5 , fout );
|
||||
|
||||
// Map name
|
||||
fwrite( name, sizeof( W8 ), strlen( name ), fout );
|
||||
|
||||
// Music file name
|
||||
fwrite( musicName, sizeof( W8 ), strlen( musicName ), fout );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
data = MM_MALLOC( length[ 0 ] );
|
||||
if( data == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
offset[ 0 ] = ftell( fout );
|
||||
|
||||
fseek( maphandle, offsetin[ 0 ], SEEK_SET );
|
||||
fread( data, 1, length[ 0 ], maphandle );
|
||||
|
||||
fwrite( data, 1, length[ 0 ], fout );
|
||||
|
||||
|
||||
data = MM_REALLOC( data, length[ 1 ] );
|
||||
if( data == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
offset[ 1 ] = ftell( fout );
|
||||
|
||||
fseek( maphandle, offsetin[ 1 ], SEEK_SET );
|
||||
fread( data, 1, length[ 1 ], maphandle );
|
||||
|
||||
fwrite( data, 1, length[ 1 ], fout );
|
||||
|
||||
|
||||
|
||||
|
||||
data = MM_REALLOC( data, length[ 2 ] );
|
||||
if( data == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
offset[ 2 ] = ftell( fout );
|
||||
|
||||
fseek( maphandle, offsetin[ 2 ], SEEK_SET );
|
||||
fread( data, 1, length[ 2 ], maphandle );
|
||||
|
||||
fwrite( data, 1, length[ 2 ], fout );
|
||||
|
||||
MM_FREE( data );
|
||||
|
||||
|
||||
fseek( fout, jmp, SEEK_SET );
|
||||
|
||||
temp = offset[ 0 ];
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset One
|
||||
|
||||
temp = offset[ 1 ];
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Two
|
||||
|
||||
temp = offset[ 2 ];
|
||||
fwrite( &temp, sizeof( W32 ), 1, fout ); // Offset Three
|
||||
|
||||
|
||||
fclose( fout );
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
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;
|
||||
}
|
||||
263
wolf3d/wolfextractor/wolf/wolf_pal.c
Normal file
263
wolf3d/wolfextractor/wolf/wolf_pal.c
Normal file
@@ -0,0 +1,263 @@
|
||||
|
||||
char gamepal[ 768 ] = {
|
||||
0, 0, 0,
|
||||
0, 0, 42,
|
||||
0, 42, 0,
|
||||
0, 42, 42,
|
||||
42, 0, 0,
|
||||
42, 0, 42,
|
||||
42, 21, 0,
|
||||
42, 42, 42,
|
||||
21, 21, 21,
|
||||
21, 21, 63,
|
||||
21, 63, 21,
|
||||
21, 63, 63,
|
||||
63, 21, 21,
|
||||
63, 21, 63,
|
||||
63, 63, 21,
|
||||
63, 63, 63,
|
||||
59, 59, 59,
|
||||
55, 55, 55,
|
||||
52, 52, 52,
|
||||
48, 48, 48,
|
||||
45, 45, 45,
|
||||
42, 42, 42,
|
||||
38, 38, 38,
|
||||
35, 35, 35,
|
||||
31, 31, 31,
|
||||
28, 28, 28,
|
||||
25, 25, 25,
|
||||
21, 21, 21,
|
||||
18, 18, 18,
|
||||
14, 14, 14,
|
||||
11, 11, 11,
|
||||
8, 8, 8,
|
||||
63, 0, 0,
|
||||
59, 0, 0,
|
||||
56, 0, 0,
|
||||
53, 0, 0,
|
||||
50, 0, 0,
|
||||
47, 0, 0,
|
||||
44, 0, 0,
|
||||
41, 0, 0,
|
||||
38, 0, 0,
|
||||
34, 0, 0,
|
||||
31, 0, 0,
|
||||
28, 0, 0,
|
||||
25, 0, 0,
|
||||
22, 0, 0,
|
||||
19, 0, 0,
|
||||
16, 0, 0,
|
||||
63, 54, 54,
|
||||
63, 46, 46,
|
||||
63, 39, 39,
|
||||
63, 31, 31,
|
||||
63, 23, 23,
|
||||
63, 16, 16,
|
||||
63, 8, 8,
|
||||
63, 0, 0,
|
||||
63, 42, 23,
|
||||
63, 38, 16,
|
||||
63, 34, 8,
|
||||
63, 30, 0,
|
||||
57, 27, 0,
|
||||
51, 24, 0,
|
||||
45, 21, 0,
|
||||
39, 19, 0,
|
||||
63, 63, 54,
|
||||
63, 63, 46,
|
||||
63, 63, 39,
|
||||
63, 63, 31,
|
||||
63, 62, 23,
|
||||
63, 61, 16,
|
||||
63, 61, 8,
|
||||
63, 61, 0,
|
||||
57, 54, 0,
|
||||
51, 49, 0,
|
||||
45, 43, 0,
|
||||
39, 39, 0,
|
||||
33, 33, 0,
|
||||
28, 27, 0,
|
||||
22, 21, 0,
|
||||
16, 16, 0,
|
||||
52, 63, 23,
|
||||
49, 63, 16,
|
||||
45, 63, 8,
|
||||
40, 63, 0,
|
||||
36, 57, 0,
|
||||
32, 51, 0,
|
||||
29, 45, 0,
|
||||
24, 39, 0,
|
||||
54, 63, 54,
|
||||
47, 63, 46,
|
||||
39, 63, 39,
|
||||
32, 63, 31,
|
||||
24, 63, 23,
|
||||
16, 63, 16,
|
||||
8, 63, 8,
|
||||
0, 63, 0,
|
||||
0, 63, 0,
|
||||
0, 59, 0,
|
||||
0, 56, 0,
|
||||
0, 53, 0,
|
||||
1, 50, 0,
|
||||
1, 47, 0,
|
||||
1, 44, 0,
|
||||
1, 41, 0,
|
||||
1, 38, 0,
|
||||
1, 34, 0,
|
||||
1, 31, 0,
|
||||
1, 28, 0,
|
||||
1, 25, 0,
|
||||
1, 22, 0,
|
||||
1, 19, 0,
|
||||
1, 16, 0,
|
||||
54, 63, 63,
|
||||
46, 63, 63,
|
||||
39, 63, 63,
|
||||
31, 63, 62,
|
||||
23, 63, 63,
|
||||
16, 63, 63,
|
||||
8, 63, 63,
|
||||
0, 63, 63,
|
||||
0, 57, 57,
|
||||
0, 51, 51,
|
||||
0, 45, 45,
|
||||
0, 39, 39,
|
||||
0, 33, 33,
|
||||
0, 28, 28,
|
||||
0, 22, 22,
|
||||
0, 16, 16,
|
||||
23, 47, 63,
|
||||
16, 44, 63,
|
||||
8, 42, 63,
|
||||
0, 39, 63,
|
||||
0, 35, 57,
|
||||
0, 31, 51,
|
||||
0, 27, 45,
|
||||
0, 23, 39,
|
||||
54, 54, 63,
|
||||
46, 47, 63,
|
||||
39, 39, 63,
|
||||
31, 32, 63,
|
||||
23, 24, 63,
|
||||
16, 16, 63,
|
||||
8, 9, 63,
|
||||
0, 1, 63,
|
||||
0, 0, 63,
|
||||
0, 0, 59,
|
||||
0, 0, 56,
|
||||
0, 0, 53,
|
||||
0, 0, 50,
|
||||
0, 0, 47,
|
||||
0, 0, 44,
|
||||
0, 0, 41,
|
||||
0, 0, 38,
|
||||
0, 0, 34,
|
||||
0, 0, 31,
|
||||
0, 0, 28,
|
||||
0, 0, 25,
|
||||
0, 0, 22,
|
||||
0, 0, 19,
|
||||
0, 0, 16,
|
||||
10, 10, 10,
|
||||
63, 56, 13,
|
||||
63, 53, 9,
|
||||
63, 51, 6,
|
||||
63, 48, 2,
|
||||
63, 45, 0,
|
||||
|
||||
// 45, 8, 63, //hmmmm
|
||||
// 42, 0, 63, //hmmmm
|
||||
0, 14, 0,
|
||||
0, 10, 0,
|
||||
|
||||
38, 0, 57,
|
||||
32, 0, 51,
|
||||
29, 0, 45,
|
||||
24, 0, 39,
|
||||
20, 0, 33,
|
||||
17, 0, 28,
|
||||
13, 0, 22,
|
||||
10, 0, 16,
|
||||
63, 54, 63,
|
||||
63, 46, 63,
|
||||
63, 39, 63,
|
||||
63, 31, 63,
|
||||
63, 23, 63,
|
||||
63, 16, 63,
|
||||
63, 8, 63,
|
||||
63, 0, 63,
|
||||
56, 0, 57,
|
||||
50, 0, 51,
|
||||
45, 0, 45,
|
||||
39, 0, 39,
|
||||
33, 0, 33,
|
||||
27, 0, 28,
|
||||
22, 0, 22,
|
||||
16, 0, 16,
|
||||
63, 58, 55,
|
||||
63, 56, 52,
|
||||
63, 54, 49,
|
||||
63, 53, 47,
|
||||
63, 51, 44,
|
||||
63, 49, 41,
|
||||
63, 47, 39,
|
||||
63, 46, 36,
|
||||
63, 44, 32,
|
||||
63, 41, 28,
|
||||
63, 39, 24,
|
||||
60, 37, 23,
|
||||
58, 35, 22,
|
||||
55, 34, 21,
|
||||
52, 32, 20,
|
||||
50, 31, 19,
|
||||
47, 30, 18,
|
||||
45, 28, 17,
|
||||
42, 26, 16,
|
||||
40, 25, 15,
|
||||
39, 24, 14,
|
||||
36, 23, 13,
|
||||
34, 22, 12,
|
||||
32, 20, 11,
|
||||
29, 19, 10,
|
||||
27, 18, 9,
|
||||
23, 16, 8,
|
||||
21, 15, 7,
|
||||
18, 14, 6,
|
||||
16, 12, 6,
|
||||
14, 11, 5,
|
||||
10, 8, 3,
|
||||
24, 0, 25,
|
||||
0, 25, 25,
|
||||
0, 24, 24,
|
||||
0, 0, 7,
|
||||
0, 0, 11,
|
||||
12, 9, 4,
|
||||
18, 0, 18,
|
||||
20, 0, 20,
|
||||
0, 0, 13,
|
||||
7, 7, 7,
|
||||
19, 19, 19,
|
||||
23, 23, 23,
|
||||
16, 16, 16,
|
||||
12, 12, 12,
|
||||
13, 13, 13,
|
||||
54, 61, 61,
|
||||
46, 58, 58,
|
||||
39, 55, 55,
|
||||
29, 50, 50,
|
||||
18, 48, 48,
|
||||
8, 45, 45,
|
||||
8, 44, 44,
|
||||
0, 41, 41,
|
||||
0, 38, 38,
|
||||
0, 35, 35,
|
||||
0, 33, 33,
|
||||
0, 31, 31,
|
||||
0, 30, 30,
|
||||
0, 29, 29,
|
||||
0, 28, 28,
|
||||
0, 27, 27,
|
||||
38, 0, 34
|
||||
};
|
||||
943
wolf3d/wolfextractor/wolf/wolf_pm.c
Normal file
943
wolf3d/wolfextractor/wolf/wolf_pm.c
Normal file
@@ -0,0 +1,943 @@
|
||||
/*
|
||||
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* wolf_pm.c: Decode Wolfenstein3-D Page data.
|
||||
*
|
||||
* Author: Michael Liebscher <johnnycanuck@users.sourceforge.net>
|
||||
*
|
||||
* Acknowledgement:
|
||||
* This code was derived from Wolfenstein 3-D, and was originally
|
||||
* written by Id Software, Inc.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "wolf_def.h"
|
||||
|
||||
#include "../../../common/arch.h"
|
||||
#include "../../../common/common_utils.h"
|
||||
#include "../loaders/tga.h"
|
||||
#include "../hq2x.h"
|
||||
#include "../loaders/wav.h"
|
||||
#include "../filesys/file.h"
|
||||
#include "../string/com_string.h"
|
||||
#include "../memory/memory.h"
|
||||
|
||||
|
||||
extern char gamepal[];
|
||||
|
||||
#define PAGEFNAME "VSWAP"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define SAMPLERATE 7000 // In Hz
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
W32 offset; // Offset of chunk into file
|
||||
W16 length; // Length of the chunk
|
||||
|
||||
} PageList_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
W16 leftpix, rightpix;
|
||||
W16 dataofs[ 64 ];
|
||||
// table data after dataofs[ rightpix - leftpix + 1 ]
|
||||
|
||||
} t_compshape;
|
||||
|
||||
|
||||
PRIVATE PageList_t *PMPages;
|
||||
|
||||
PRIVATE FILE *PageFile = NULL;
|
||||
|
||||
PRIVATE W16 PMNumBlocks;
|
||||
PRIVATE W16 PMSpriteStart, PMSoundStart;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: CAL_GetGrChunkLength() -Opens the page file and sets up
|
||||
the page info.
|
||||
|
||||
Parameters: extension -[in] Pointer to a null-terminated string that
|
||||
specifies the file extension.
|
||||
(must be in '.XXX' format)
|
||||
|
||||
Returns: 1 on success, otherwise 0.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 PML_OpenPageFile( const char *extension )
|
||||
{
|
||||
W32 i;
|
||||
W32 size;
|
||||
void *buf;
|
||||
char filename[ 16 ];
|
||||
W32 *offsetptr;
|
||||
W16 *lengthptr;
|
||||
PageList_t *page;
|
||||
|
||||
if( ! extension || ! *extension )
|
||||
{
|
||||
printf( "Invalid file extension passed to PML_OpenPageFile()\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
cs_strlcpy( filename, PAGEFNAME, sizeof( filename ) );
|
||||
cs_strlcat( filename, extension, sizeof( filename ) );
|
||||
|
||||
PageFile = fopen( cs_strupr( filename ), "rb" );
|
||||
if( PageFile == NULL )
|
||||
{
|
||||
PageFile = fopen( cs_strlwr( filename ), "rb" );
|
||||
if( PageFile == NULL )
|
||||
{
|
||||
printf( "Could not open file (%s) for read!\n", filename );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Read in header variables
|
||||
fread( &PMNumBlocks, sizeof( PMNumBlocks ), 1, PageFile );
|
||||
fread( &PMSpriteStart, sizeof( PMSpriteStart ), 1, PageFile );
|
||||
fread( &PMSoundStart, sizeof( PMSoundStart ), 1, PageFile );
|
||||
|
||||
|
||||
// Allocate and clear the page list
|
||||
PMPages = (PageList_t *) MM_MALLOC( sizeof( PageList_t ) * PMNumBlocks );
|
||||
if( PMPages == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
memset( PMPages, 0, sizeof( PageList_t ) * PMNumBlocks );
|
||||
|
||||
// Read in the chunk offsets
|
||||
size = sizeof( W32 ) * PMNumBlocks;
|
||||
|
||||
buf = MM_MALLOC( size );
|
||||
if( buf == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( fread( buf, 1, size, PageFile ) == 0 )
|
||||
{
|
||||
printf( "PML_OpenPageFile: Length read failed\n" );
|
||||
}
|
||||
offsetptr = (PW32) buf;
|
||||
for( i = 0, page = PMPages; i < PMNumBlocks; i++, page++ )
|
||||
{
|
||||
page->offset = *offsetptr++;
|
||||
}
|
||||
MM_FREE( buf );
|
||||
|
||||
// Read in the chunk lengths
|
||||
size = sizeof( W16 ) * PMNumBlocks;
|
||||
|
||||
buf = MM_MALLOC( size );
|
||||
if( buf == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( fread( buf, 1, size, PageFile ) == 0 )
|
||||
{
|
||||
printf( "PML_OpenPageFile: Length read failed\n" );
|
||||
}
|
||||
|
||||
lengthptr = (PW16)buf;
|
||||
for( i = 0, page = PMPages; i < PMNumBlocks; ++i, page++ )
|
||||
{
|
||||
page->length = *lengthptr++;
|
||||
}
|
||||
|
||||
MM_FREE( buf );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PML_ReadFromFile() -Reads in data from Page file.
|
||||
|
||||
Parameters: buf -[out] Storage location for data.
|
||||
offset -[in] Number of bytes from beginning of file.
|
||||
length -[in] Maximum number of items to be read.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void PML_ReadFromFile( W8 *buf, SW32 offset, W16 length )
|
||||
{
|
||||
if( ! buf )
|
||||
{
|
||||
printf( "[PML_ReadFromFile]: NULL pointer\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
if( ! offset )
|
||||
{
|
||||
printf( "[PML_ReadFromFile]: Zero offset\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
if( fseek( PageFile, offset, SEEK_SET ) )
|
||||
{
|
||||
printf( "[PML_ReadFromFile]: Seek failed\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
if( ! fread( buf, 1, length, PageFile ) )
|
||||
{
|
||||
printf( "[PML_ReadFromFile]: Read failed\n" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PML_LoadPage() -Reads in data from Page file.
|
||||
|
||||
Parameters: buf -[out] Storage location for data.
|
||||
offset -[in] Number of bytes from beginning of file.
|
||||
clength -[in] Maximum number of items to be read.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void *PML_LoadPage( W32 pagenum, W16 *clength )
|
||||
{
|
||||
W8 *addr;
|
||||
PageList_t *page;
|
||||
|
||||
page = &PMPages[ pagenum ];
|
||||
if( page->length == 0 )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*clength = page->length;
|
||||
|
||||
addr = MM_MALLOC( page->length );
|
||||
if( addr == NULL )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PML_ReadFromFile( addr, page->offset, page->length );
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
void OutlineImage( W8 *rgba, int width, int height ) {
|
||||
W8 *data_p;
|
||||
W8 *copy_p;
|
||||
W8 *copy = (W8 *)_alloca( width * height * 4 );
|
||||
int x, y;
|
||||
|
||||
memcpy( copy, rgba, width * height * 4 );
|
||||
data_p = rgba;
|
||||
copy_p = copy;
|
||||
|
||||
for ( y = 0 ; y < height ; y++ ) {
|
||||
for ( x = 0 ; x < width ; x++, data_p+=4, copy_p+=4 ) {
|
||||
if ( data_p[3] != 0 ) {
|
||||
continue;
|
||||
}
|
||||
if ( x < width-1 && copy_p[7] != 0 ) {
|
||||
*(int *)data_p = ((int *)copy_p)[1];
|
||||
} else if ( x > 0 && copy_p[-1] != 0 ) {
|
||||
*(int *)data_p = ((int *)copy_p)[-1];
|
||||
} else if ( y < height-1 && copy_p[width*4+3] != 0 ) {
|
||||
*(int *)data_p = ((int *)copy_p)[width];
|
||||
} else if ( y > 0 && copy_p[-width*4+3] != 0 ) {
|
||||
*(int *)data_p = ((int *)copy_p)[-width];
|
||||
}
|
||||
data_p[3] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
int hasAlpha;
|
||||
int srcWidth;
|
||||
int srcHeight;
|
||||
int uploadWidth;
|
||||
int uploadHeight;
|
||||
|
||||
// track the outlines of up to two boxes of non-transparent pixels.
|
||||
// The reason for two boxes is that the common lights have something
|
||||
// at the top and something at the bottom, with nothing inbetween.
|
||||
// These are inclusive bounds of the rows / columns with non-0 alpha
|
||||
int numBounds;
|
||||
int bounds[2][2][2];
|
||||
} picHeader_t;
|
||||
|
||||
int RowClear( W8 *rgba, int w, int h, int y ) {
|
||||
int x;
|
||||
for ( x = 0 ; x < w ; x++ ) {
|
||||
if ( rgba[(y*w+x)*4+3] != 0 ) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Write5551( const char *tgaName, int w, int h, W8 *rgba, int hasAlpha ) {
|
||||
unsigned short *s = _alloca( w*h*4 );
|
||||
FILE *f;
|
||||
picHeader_t *header = (picHeader_t *)s;
|
||||
unsigned short *s_p;
|
||||
int i;
|
||||
int shorts;
|
||||
W8 *tempMip;
|
||||
W8 *rgba_p;
|
||||
int b, x, y, c;
|
||||
char newName[1024];
|
||||
char *ext;
|
||||
|
||||
memset( header, 0, sizeof( *header ) );
|
||||
header->hasAlpha = hasAlpha;
|
||||
header->srcWidth = w;
|
||||
header->srcHeight = h;
|
||||
header->uploadWidth = w;
|
||||
header->uploadHeight = h;
|
||||
|
||||
if ( !hasAlpha ) {
|
||||
// convert from 24 bit to 32 bit
|
||||
W8 *newPic = _alloca( w * h * 4 );
|
||||
for ( i = 0 ; i < w*h ; i++ ) {
|
||||
newPic[i*4+0] = rgba[i*3+0];
|
||||
newPic[i*4+1] = rgba[i*3+1];
|
||||
newPic[i*4+2] = rgba[i*3+2];
|
||||
newPic[i*4+3] = 255;
|
||||
}
|
||||
rgba = newPic;
|
||||
}
|
||||
|
||||
// find the bounding boxes for more efficient drawing
|
||||
header->numBounds = 1;
|
||||
for ( y = 0 ; y < h ; y++ ) {
|
||||
if ( !RowClear( rgba, w, h, y ) ) {
|
||||
// this row is needed
|
||||
header->bounds[0][0][1] = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for ( y = h-1 ; y >= 0 ; y-- ) {
|
||||
if ( !RowClear( rgba, w, h, y ) ) {
|
||||
// this row is needed
|
||||
header->bounds[0][1][1] = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// if the middle row is clear, make two boxes
|
||||
// We could make a better test, but this catches the ones we care about...
|
||||
if ( header->bounds[0][0][1] < h/2 && header->bounds[0][1][1] > h / 2 && RowClear( rgba, w, h, h/2 ) ) {
|
||||
header->numBounds = 2;
|
||||
header->bounds[1][1][1] = header->bounds[0][1][1];
|
||||
|
||||
for ( y = h/2-1 ; y >= 0 ; y-- ) {
|
||||
if ( !RowClear( rgba, w, h, y ) ) {
|
||||
header->bounds[0][1][1] = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for ( y = h/2+1 ; y < h ; y++ ) {
|
||||
if ( !RowClear( rgba, w, h, y ) ) {
|
||||
header->bounds[1][0][1] = y;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for ( b = 0 ; b < header->numBounds ; b++ ) {
|
||||
for ( x = 0 ; x < w ; x++ ) {
|
||||
for ( y = header->bounds[b][0][1] ; y <= header->bounds[b][1][1] ; y++ ) {
|
||||
if ( rgba[(y*w+x)*4+3] != 0 ) {
|
||||
// this column is needed
|
||||
header->bounds[b][0][0] = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( y <= header->bounds[b][1][1] ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for ( x = w-1 ; x >= 0 ; x-- ) {
|
||||
for ( y = header->bounds[b][0][1] ; y <= header->bounds[b][1][1] ; y++ ) {
|
||||
if ( rgba[(y*w+x)*4+3] != 0 ) {
|
||||
// this column is needed
|
||||
header->bounds[b][1][0] = x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( y <= header->bounds[b][1][1] ) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s_p = (unsigned short *)(header+1);
|
||||
|
||||
while ( 1 ) {
|
||||
rgba_p = rgba;
|
||||
|
||||
// convert to 5551
|
||||
for ( i = 0 ; i < w*h ; i++, rgba_p+=4 ) {
|
||||
int r = rgba_p[0];
|
||||
int g = rgba_p[1];
|
||||
int b = rgba_p[2];
|
||||
int a = rgba_p[3];
|
||||
|
||||
*s_p++ = ((r>>3)<<11) | ((g>>3)<<6) | ((b>>3)<<1) | (a>>7);
|
||||
}
|
||||
|
||||
if ( w == 1 && h == 1 ) {
|
||||
break;
|
||||
}
|
||||
// mip map
|
||||
w >>= 1;
|
||||
if ( w == 0 ) {
|
||||
w = 1;
|
||||
}
|
||||
h >>= 1;
|
||||
if ( h == 0 ) {
|
||||
h = 1;
|
||||
}
|
||||
tempMip = _alloca( w * h * 4 );
|
||||
for ( y = 0 ; y < h ; y++ ) {
|
||||
for ( x = 0 ; x < w ; x++ ) {
|
||||
for ( c = 0 ; c < 4 ; c++ ) {
|
||||
tempMip[(y*w+x)*4+c] = (
|
||||
rgba[((y*2+0)*w*2+(x*2+0))*4+c] +
|
||||
rgba[((y*2+0)*w*2+(x*2+1))*4+c] +
|
||||
rgba[((y*2+1)*w*2+(x*2+0))*4+c] +
|
||||
rgba[((y*2+1)*w*2+(x*2+1))*4+c] ) >> 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
rgba = tempMip;
|
||||
}
|
||||
shorts = s_p - s;
|
||||
|
||||
// byte swap
|
||||
#if 0
|
||||
for ( i = 0 ; i < shorts ; i++ ) {
|
||||
int temp = ((W8 *)s)[i*2+0];
|
||||
((W8 *)s)[i*2+0] = ((W8 *)s)[i*2+1];
|
||||
((W8 *)s)[i*2+1] = temp;
|
||||
}
|
||||
#endif
|
||||
|
||||
// write
|
||||
strcpy( newName, tgaName );
|
||||
ext = strstr( newName, ".tga" );
|
||||
strcpy( ext, ".5551" );
|
||||
f = fopen( newName, "wb" );
|
||||
if( f == NULL ) {
|
||||
printf( "Could not open file (%s) for write!\n", newName );
|
||||
return;
|
||||
}
|
||||
fwrite( s, 2, shorts, f );
|
||||
fclose( f );
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
void UpdateSingleSprite( const char *srcTGA, const char *destTGA ) {
|
||||
W8 *rgba;
|
||||
int width, height;
|
||||
int i;
|
||||
|
||||
// HACK HACK HACK just to convert the single health pack sprite without the
|
||||
// trademarked "red cross"
|
||||
|
||||
LoadTGA( srcTGA, &rgba, &width, &height );
|
||||
assert( rgba );
|
||||
assert( width == 64 && height == 64 );
|
||||
|
||||
// JDC: outline the image to avoid dark halos with filtering
|
||||
for ( i = 0 ; i < 8 ; i++ ) {
|
||||
OutlineImage( rgba, 64, 64 );
|
||||
}
|
||||
for ( i = 0 ; i < 64*64 ; i++ ) {
|
||||
if ( rgba[i*4+3] == 1 ) {
|
||||
rgba[i*4+3] = 0;
|
||||
}
|
||||
}
|
||||
WriteTGA( destTGA, 32, 64, 64, rgba, 0, 1 );
|
||||
Write5551( destTGA, 64, 64, rgba, 1 );
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PML_LoadPage() -Save image data from page file.
|
||||
|
||||
Parameters: nPage -[in] Page number to save.
|
||||
filename -[in] Pointer to string with filename.
|
||||
buffer -[in] Allocated memory buffer to hold image data.
|
||||
buffer2 -[in] Allocated memory buffer to hold hq2x data.
|
||||
|
||||
Returns: Non-zero on success, otherwise zero.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 PML_SaveGFXPage( W32 nPage, const char *filename,
|
||||
W8 *buffer, W8 *buffer2, _boolean iswall, W32 GunFlash )
|
||||
{
|
||||
W16 x, y;
|
||||
W8 *data;
|
||||
W8 *ptr;
|
||||
W16 temp;
|
||||
W8 r,g,b;
|
||||
W16 clength; // Chunk length
|
||||
|
||||
data = (PW8)PML_LoadPage( nPage, &clength );
|
||||
if( data == NULL )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( nPage < PMSpriteStart )
|
||||
{
|
||||
// simple 64x64 image
|
||||
W8 *rgb = (W8 *)_alloca( 64*64*3 );
|
||||
for( x = 0; x < 64; ++x )
|
||||
{
|
||||
for( y = 0; y < 64; ++y )
|
||||
{
|
||||
temp = ( data[ (x<<6)+y ] ) * 3;
|
||||
|
||||
// gamepal is in 6 bit color
|
||||
r = gamepal[ temp ];
|
||||
g = gamepal[ temp+1 ];
|
||||
b = gamepal[ temp+2 ];
|
||||
|
||||
ptr = rgb + ( ( (y << 6) + x ) * 3 );
|
||||
ptr[ 0 ] = ( r << 2 ) | ( r >> 4 );
|
||||
ptr[ 1 ] = ( g << 2 ) | ( g >> 4 );
|
||||
ptr[ 2 ] = ( b << 2 ) | ( b >> 4 );
|
||||
}
|
||||
}
|
||||
WriteTGA( filename, 24, 64, 64, rgb, 0, 1 );
|
||||
Write5551( filename, 64, 64, rgb, 0 );
|
||||
}
|
||||
else if( nPage >= PMSpriteStart && nPage < PMSoundStart )
|
||||
{
|
||||
W16 *cmdptr;
|
||||
short *linecmds;
|
||||
t_compshape *shape;
|
||||
int x, y;
|
||||
W8 *rgba = (W8 *)_alloca( 64*64*4 );
|
||||
int i;
|
||||
|
||||
// all transparent at the beginning
|
||||
memset( rgba, 0, 64*64*4 );
|
||||
|
||||
// draw the spans into the buffer
|
||||
shape = (t_compshape *)data;
|
||||
cmdptr = shape->dataofs;
|
||||
for( x = shape->leftpix; x <= shape->rightpix; ++x )
|
||||
{
|
||||
linecmds = (short *)( data + *cmdptr++ );
|
||||
for( ; *linecmds; linecmds += 3 )
|
||||
{
|
||||
i = linecmds[ 2 ] / 2 + linecmds[ 1 ];
|
||||
for( y = linecmds[ 2 ] / 2; y < linecmds[ 0 ] / 2; ++y, ++i )
|
||||
{
|
||||
temp = ( data[ i ] ) * 3;
|
||||
|
||||
r = gamepal[ temp ];
|
||||
g = gamepal[ temp+1 ];
|
||||
b = gamepal[ temp+2 ];
|
||||
|
||||
ptr = rgba + ( (y * 64 + x) * 4 );
|
||||
ptr[ 0 ] = ( r << 2 ) | ( r >> 4 );
|
||||
ptr[ 1 ] = ( g << 2 ) | ( g >> 4 );
|
||||
ptr[ 2 ] = ( b << 2 ) | ( b >> 4 );
|
||||
ptr[ 3 ] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// JDC: outline the image to avoid dark halos with filtering
|
||||
for ( i = 0 ; i < 8 ; i++ ) {
|
||||
OutlineImage( rgba, 64, 64 );
|
||||
}
|
||||
for ( i = 0 ; i < 64*64 ; i++ ) {
|
||||
if ( rgba[i*4+3] == 1 ) {
|
||||
rgba[i*4+3] = 0;
|
||||
}
|
||||
}
|
||||
WriteTGA( filename, 32, 64, 64, rgba, 0, 1 );
|
||||
Write5551( filename, 64, 64, rgba, 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
MM_FREE( data );
|
||||
printf( "Out of bounds page number passed into PML_SavePage()!\n" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
MM_FREE( data );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PML_SaveSoundPage() -Save sound data from Page file.
|
||||
|
||||
Parameters: nPage -[in] Page number to save.
|
||||
filename -[in] Pointer to string with filename.
|
||||
buffer -[in] Allocated memory buffer to hold sound data.
|
||||
size -[in] Size of allocated memory buffer.
|
||||
|
||||
Returns: Non-zero on success, otherwise zero.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE W8 PML_SaveSoundPage( W32 nPage, char *filename,
|
||||
W8 *buffer,
|
||||
W32 size )
|
||||
{
|
||||
static W16 totallength = 0;
|
||||
W8 *data;
|
||||
W16 clength; // Chunk length
|
||||
|
||||
if( nPage < PMSoundStart || nPage > PMNumBlocks )
|
||||
{
|
||||
printf( "Out of bounds page number passed into PML_SaveSound()!\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
data = (PW8) PML_LoadPage( nPage, &clength );
|
||||
if( data == NULL )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if( totallength > size )
|
||||
{
|
||||
printf( "[wolf_pmc] Buffer not large enough!\n" );
|
||||
return 2;
|
||||
}
|
||||
|
||||
memcpy( buffer + totallength, data, clength );
|
||||
|
||||
totallength += clength;
|
||||
if( clength < 4096 )
|
||||
{
|
||||
write_wav( filename, buffer, totallength, 1, SAMPLERATE, 1 );
|
||||
totallength = 0;
|
||||
}
|
||||
|
||||
MM_FREE( data );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PML_Shutdown() -Shutdown page cache.
|
||||
|
||||
Parameters: Nothing.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PRIVATE void PML_Shutdown()
|
||||
{
|
||||
if( PageFile )
|
||||
{
|
||||
fclose( PageFile );
|
||||
PageFile = NULL;
|
||||
}
|
||||
|
||||
if( PMPages )
|
||||
{
|
||||
MM_FREE( PMPages );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Function: PExtractor() -Interface to page manager.
|
||||
|
||||
Parameters: extension -[in] Ponter to string with file extenion of data
|
||||
files.
|
||||
|
||||
Returns: Nothing.
|
||||
|
||||
Notes:
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
PUBLIC _boolean PExtractor( const char *extension, W16 version )
|
||||
{
|
||||
W32 i, j;
|
||||
char filename[ 256 ];
|
||||
W8 *buffer, *buffer2;
|
||||
W32 Flash;
|
||||
|
||||
|
||||
//
|
||||
// Setup
|
||||
//
|
||||
|
||||
if( 0 == FS_Mkdir( GFXWALLDIR ) )
|
||||
{
|
||||
printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXWALLDIR );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( version == SOD_PAK || version == SDM_PAK )
|
||||
{
|
||||
if( 0 == FS_Mkdir( SODGFXSPRITEDIR ) )
|
||||
{
|
||||
printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXSPRITEDIR );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( 0 == FS_Mkdir( SODSFXDIR ) )
|
||||
{
|
||||
printf( "[%s] Could not create directory (%s)!\n", "PExtractor", SODSFXDIR );
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( 0 == FS_Mkdir( GFXSPRITEDIR ) )
|
||||
{
|
||||
printf( "[%s] Could not create directory (%s)!\n", "PExtractor", GFXSPRITEDIR );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if( 0 == FS_Mkdir( SFXDIR ) )
|
||||
{
|
||||
printf( "[%s] Could not create directory (%s)!\n", "PExtractor", SFXDIR );
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( ! PML_OpenPageFile( extension ) )
|
||||
{
|
||||
PML_Shutdown();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Allocate buffers
|
||||
//
|
||||
|
||||
buffer = MM_MALLOC( 64 * 64 * 2 );
|
||||
if( buffer == NULL )
|
||||
{
|
||||
PML_Shutdown();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
buffer2 = MM_MALLOC( 128 * 128 * 4 );
|
||||
if( buffer2 == NULL )
|
||||
{
|
||||
MM_FREE( buffer );
|
||||
PML_Shutdown();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//
|
||||
// Decode Page data
|
||||
//
|
||||
|
||||
printf( "Decoding Page Data...\n" );
|
||||
|
||||
for( i = 0, j = 0; i < PMSpriteStart; ++i, ++j )
|
||||
{
|
||||
// Hacks
|
||||
if( version == WL6_PAK || version == WL1_PAK )
|
||||
{
|
||||
if( 98 == j )
|
||||
{
|
||||
j = 126;
|
||||
}
|
||||
}
|
||||
|
||||
cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", GFXWALLDIR, j );
|
||||
|
||||
PML_SaveGFXPage( i, filename, buffer, buffer2, 1, 0 );
|
||||
}
|
||||
|
||||
for( i = PMSpriteStart, j = 0; i < PMSoundStart; ++i, ++j )
|
||||
{
|
||||
// Hacks
|
||||
if( version == WL1_PAK )
|
||||
{
|
||||
if( j == 50 )
|
||||
{
|
||||
j = 54;
|
||||
}
|
||||
|
||||
if( j == 191 )
|
||||
{
|
||||
j = 300;
|
||||
i += 109;
|
||||
}
|
||||
|
||||
if( j == 311 )
|
||||
{
|
||||
j = 431;
|
||||
i += 101;
|
||||
}
|
||||
|
||||
if( j == 439 )
|
||||
{
|
||||
j = 514;
|
||||
}
|
||||
}
|
||||
|
||||
if( version == WL6_PAK )
|
||||
{
|
||||
if( j == 50 )
|
||||
{
|
||||
j = 54;
|
||||
}
|
||||
|
||||
if( j == 389 )
|
||||
{
|
||||
j = 408;
|
||||
}
|
||||
|
||||
if( j == 439 )
|
||||
{
|
||||
j = 514;
|
||||
}
|
||||
}
|
||||
|
||||
if( version == SDM_PAK )
|
||||
{
|
||||
if( j == 401 )
|
||||
{
|
||||
j = 514;
|
||||
}
|
||||
}
|
||||
|
||||
if( version == SOD_PAK )
|
||||
{
|
||||
if( j == 292 )
|
||||
{
|
||||
j = 374;
|
||||
}
|
||||
|
||||
if( j == 408 )
|
||||
{
|
||||
j = 439;
|
||||
}
|
||||
}
|
||||
|
||||
if( version == SOD_PAK || version == SDM_PAK )
|
||||
{
|
||||
cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", SODGFXSPRITEDIR, j );
|
||||
}
|
||||
else
|
||||
{
|
||||
cs_snprintf( filename, sizeof( filename ), "%s/%.3d.tga", GFXSPRITEDIR, j );
|
||||
}
|
||||
|
||||
|
||||
if( j == 531 ||
|
||||
j == 532 ||
|
||||
j == 526 ||
|
||||
j == 521 )
|
||||
{
|
||||
Flash = j;
|
||||
}
|
||||
else
|
||||
{
|
||||
Flash = 0;
|
||||
}
|
||||
|
||||
|
||||
PML_SaveGFXPage( i, filename, buffer, buffer2, 0, Flash );
|
||||
}
|
||||
|
||||
for( i = PMSoundStart, j = 0; i < PMNumBlocks-1; ++i, ++j )
|
||||
{
|
||||
if( version == SOD_PAK || version == SDM_PAK )
|
||||
{
|
||||
cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SODSFXDIR, j );
|
||||
}
|
||||
else
|
||||
{
|
||||
cs_snprintf( filename, sizeof( filename ), "%s/%.3d.wav", SFXDIR, j );
|
||||
}
|
||||
|
||||
PML_SaveSoundPage( i, filename, buffer2, 128 * 128 * 4 );
|
||||
}
|
||||
|
||||
//
|
||||
// Shutdown
|
||||
//
|
||||
|
||||
MM_FREE( buffer );
|
||||
MM_FREE( buffer2 );
|
||||
|
||||
PML_Shutdown();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user