From ae8f98a9dec9cf0ca604210bd3c80bc2b9ef11c7 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 18 May 2004 03:14:35 +0000 Subject: [PATCH] RageSurface_Load_GIF --- stepmania/src/RageSurface_Load.cpp | 12 +- stepmania/src/RageSurface_Load_GIF.cpp | 482 +++++++++++++++++++++++++ stepmania/src/RageSurface_Load_GIF.h | 33 ++ stepmania/src/StepMania.dsp | 71 ++-- stepmania/src/StepMania.vcproj | 6 + 5 files changed, 575 insertions(+), 29 deletions(-) create mode 100644 stepmania/src/RageSurface_Load_GIF.cpp create mode 100644 stepmania/src/RageSurface_Load_GIF.h diff --git a/stepmania/src/RageSurface_Load.cpp b/stepmania/src/RageSurface_Load.cpp index 6a96502937..49297f9f04 100644 --- a/stepmania/src/RageSurface_Load.cpp +++ b/stepmania/src/RageSurface_Load.cpp @@ -1,13 +1,21 @@ #include "global.h" #include "RageSurface_Load.h" #include "RageSurface_Load_PNG.h" +#include "RageSurface_Load_GIF.h" #include "RageUtil.h" #include "SDL_image.h" SDL_Surface *RageSurface::LoadFile( const CString &sPath ) { const CString ext = GetExtension( sPath ); - if( ext.CompareNoCase( "png" ) ) + + CString error; + SDL_Surface *ret = NULL; + if( !ext.CompareNoCase("png") ) + ret = RageSurface_Load_PNG( sPath, error ); + else if( !ext.CompareNoCase("gif") ) + ret = RageSurface_Load_GIF( sPath, error ); + else { SDL_RWops *rw = OpenRWops( sPath ); if( rw == NULL ) @@ -22,8 +30,6 @@ SDL_Surface *RageSurface::LoadFile( const CString &sPath ) return ret; } - CString error; - SDL_Surface *ret = RageSurface_Load_PNG( sPath, error ); if( ret == NULL ) SDL_SetError( "%s", error.c_str() ); diff --git a/stepmania/src/RageSurface_Load_GIF.cpp b/stepmania/src/RageSurface_Load_GIF.cpp new file mode 100644 index 0000000000..cc820a6ceb --- /dev/null +++ b/stepmania/src/RageSurface_Load_GIF.cpp @@ -0,0 +1,482 @@ +#include "global.h" +#include "RageSurface_Load_GIF.h" +#include "RageFile.h" +#include "RageUtil.h" +#include "RageLog.h" + +#define MAXCOLORMAPSIZE 256 + +#define MAX_LWZ_BITS 12 + +#define INTERLACE 0x40 +#define LOCALCOLORMAP 0x80 +#define BitSet(byte, bit) (((byte) & (bit)) == (bit)) + +#define ReadOK(file,buffer,len) (file.Read( buffer, len, 1) != 0) + +#define LM_to_uint(a,b) (((b)<<8)|(a)) + + +static SDL_Surface *ReadImage( RageFile &f, int len, int height, + const SDL_Color localColorMap[MAXCOLORMAPSIZE], + int interlace, int ignore ); + +static bool ReadPalette( RageFile &f, int number, SDL_Color buffer[MAXCOLORMAPSIZE] ) +{ + for( int i = 0; i < number; ++i ) + { + if( !ReadOK(f, &buffer[i].r, sizeof(buffer[i].r)) ) + return false; + if( !ReadOK(f, &buffer[i].g, sizeof(buffer[i].g)) ) + return false; + if( !ReadOK(f, &buffer[i].b, sizeof(buffer[i].b)) ) + return false; + buffer[i].unused = 0xFF; + } + + return true; +} + + +static int GetDataBlock( RageFile &f, unsigned char *buf ) +{ + unsigned char count; + + if( !ReadOK(f, &count, 1) ) + { + /* pm_message("error in getting DataBlock size" ); */ + return -1; + } + + if( count != 0 && !ReadOK(f, buf, count) ) + { + /* pm_message("error in reading DataBlock" ); */ + return -1; + } + return count; +} + + +SDL_Surface *RageSurface_Load_GIF( const CString &sPath, CString &error ) +{ + unsigned char buf[256]; + int imageCount = 0; + int imageNumber = 1; + RageFile f; + + if( !f.Open( sPath ) ) + { + error = f.GetError(); + return NULL; + } + + if( !ReadOK(f, buf, 6) ) + { + error = "error reading magic number"; + return NULL; + } + if( strncmp((char *) buf, "GIF", 3) != 0 ) + { + error = "not a GIF file"; + return NULL; + } + + { + char version[4]; + strncpy(version, (char *) buf + 3, 3); + version[3] = '\0'; + + if( (strcmp(version, "87a") != 0) && (strcmp(version, "89a") != 0) ) + { + error = "bad version number, not '87a' or '89a'"; + return NULL; + } + } + + if( !ReadOK(f, buf, 7) ) + { + error = "failed to read screen descriptor"; + return NULL; + } + + SDL_Color GlobalColorMap[MAXCOLORMAPSIZE]; + unsigned int GlobalBitPixel = 0; + + GlobalBitPixel = 2 << (buf[4] & 0x07); + + if( BitSet(buf[4], LOCALCOLORMAP) ) + { + /* Global Colormap */ + if( !ReadPalette(f, GlobalBitPixel, GlobalColorMap ) ) + { + error = "error reading global colormap"; + return NULL; + } + } + + int transparency = -1; + + while(1) + { + unsigned char type; + if( !ReadOK(f, &type, 1) ) + { + error = "EOF / read error on image data"; + return NULL; + } + switch( type ) + { + case ';': + { + /* GIF terminator */ + if( imageCount < imageNumber ) + { + error = ssprintf( "only %d image%s found in file", + imageCount, imageCount > 1 ? "s" : ""); + return NULL; + } + } + + case '!': + { + /* Extension */ + unsigned char label; + if( !ReadOK(f, &label, 1) ) + { + error = "EOF / read error on extention function code"; + return NULL; + } + + switch( label ) + { + case 0xf9: + GetDataBlock( f, (unsigned char *) buf ); + if( (buf[0] & 0x1) != 0 ) + transparency = buf[3]; + } + + while( GetDataBlock(f, (unsigned char *) buf) != 0 ) + ; + + continue; + } + case ',': + { + ++imageCount; + + if( !ReadOK(f, buf, 9) ) + { + error = "couldn't read left/top/width/height"; + return NULL; + } + + int bitPixel = 1 << ((buf[8] & 0x07) + 1); + SDL_Color LocalColorMap[MAXCOLORMAPSIZE]; + + if( BitSet(buf[8], LOCALCOLORMAP) ) + { + if( !ReadPalette(f, bitPixel, LocalColorMap) ) + { + error = "error reading local colormap"; + return NULL; + } + } else { + bitPixel = GlobalBitPixel; + memcpy( LocalColorMap, GlobalColorMap, sizeof(LocalColorMap) ); + } + + SDL_Surface *image = ReadImage( f, LM_to_uint(buf[4], buf[5]), LM_to_uint(buf[6], buf[7]), + LocalColorMap, BitSet(buf[8], INTERLACE), + imageCount != imageNumber ); + + if( !image ) + continue; + + if( transparency != -1 ) + mySDL_AddColorKey( image, transparency ); + + return image; + } + default: continue; /* Not a valid start character */ + } + } + + return NULL; +} + +struct LWZState +{ + bool fresh; + int code_size, set_code_size; + int max_code, max_code_size; + int firstcode, oldcode; + int clear_code, end_code; + int table[2][(1 << MAX_LWZ_BITS)]; + int stack[(1 << (MAX_LWZ_BITS)) * 2], *sp; + + struct Code + { + /* code state */ + unsigned char buf[280]; + int curbit, lastbit, last_byte; + bool done; + void Init(); + int Get( RageFile &f, int code_size ); + }; + Code m_Code; + + LWZState() { fresh = false; } + bool Init( RageFile &f ); + int ReadByte( RageFile &f ); +}; + +void LWZState::Code::Init() +{ + curbit = lastbit = 0; + last_byte = 2; + done = false; + memset( buf, 0, sizeof(buf) ); +} + +int LWZState::Code::Get( RageFile &f, int code_size ) +{ + if( (curbit + code_size) >= lastbit ) + { + if (done) + { +// if( curbit >= lastbit ) +// RWSetMsg("ran off the end of my bits"); + return -1; + } + buf[0] = buf[last_byte - 2]; + buf[1] = buf[last_byte - 1]; + + unsigned char count = (unsigned char) GetDataBlock( f, &buf[2] ); + if( count == 0 ) + done = true; + + last_byte = 2 + count; + curbit = (curbit - lastbit) + 16; + lastbit = (2 + count) * 8; + } + int ret = 0; + int i, j; + for (i = curbit, j = 0; j < code_size; ++i, ++j) + ret |= ((buf[i / 8] & (1 << (i % 8))) != 0) << j; + + curbit += code_size; + + return ret; +} + + +bool LWZState::Init( RageFile &f ) +{ + unsigned char input_code_size; + + /* code size: */ + if( !ReadOK(f, &input_code_size, 1) ) + { +// RWSetMsg("EOF / read error on image data"); + return false; + } + + set_code_size = input_code_size; + code_size = set_code_size + 1; + clear_code = 1 << set_code_size; + end_code = clear_code + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + + m_Code.Init(); + + fresh = true; + + memset( table, 0, sizeof(table) ); + + for( int i = 0; i < clear_code; ++i ) + table[1][i] = i; + + sp = stack; + + return true; +} + +int LWZState::ReadByte( RageFile &f ) +{ + if( fresh ) + { + fresh = false; + do { + firstcode = oldcode = m_Code.Get( f, code_size ); + } while ( firstcode == clear_code ); + return firstcode; + } + + if( sp > stack ) + return *--sp; + + int code; + while( (code = m_Code.Get(f, code_size)) >= 0 ) + { + if( code == clear_code ) + { + memset( table, 0, sizeof(table) ); + for( int i = 0; i < clear_code; ++i ) + table[1][i] = i; + code_size = set_code_size + 1; + max_code_size = 2 * clear_code; + max_code = clear_code + 2; + sp = stack; + firstcode = oldcode = m_Code.Get( f, code_size ); + return firstcode; + } + else if( code == end_code ) + { + int count; + unsigned char buf[260]; + + if( m_Code.done ) + return -2; + + while( (count = GetDataBlock(f, buf)) > 0 ) + ; + + if( count != 0 ) + { + /* + * pm_message("missing EOD in data stream (common occurence)"); + */ + } + return -2; + } + int incode = code; + + if( code >= max_code ) + { + *sp++ = firstcode; + code = oldcode; + } + while( code >= clear_code ) + { + *sp++ = table[1][code]; +// if (code == table[0][code]) +// RWSetMsg("circular table entry BIG ERROR"); + code = table[0][code]; + } + + *sp++ = firstcode = table[1][code]; + + if( (code = max_code) < (1 << MAX_LWZ_BITS) ) + { + table[0][code] = oldcode; + table[1][code] = firstcode; + ++max_code; + if (max_code >= max_code_size && + max_code_size < (1 << MAX_LWZ_BITS)) + { + max_code_size *= 2; + ++code_size; + } + } + oldcode = incode; + + if( sp > stack ) + return *--sp; + } + return code; +} + +static SDL_Surface *ReadImage( RageFile &f, int len, int height, + const SDL_Color localColorMap[MAXCOLORMAPSIZE], + int interlace, int ignore ) +{ + int xpos = 0, ypos = 0, pass = 0; + + /* Initialize the compression routines */ + LWZState state; + if( !state.Init(f) ) + { +// RWSetMsg("error reading image"); + return NULL; + } + /* If this is an "uninteresting picture" ignore it. */ + if( ignore ) + { + while( state.ReadByte(f) >= 0 ) + ; + return NULL; + } + + SDL_Surface *image = SDL_CreateRGBSurfaceSane( SDL_SWSURFACE, len, height, 8, 0, 0, 0, 0 ); + mySDL_SetPalette( image, localColorMap, 0, 256 ); + + int v; + while( (v = state.ReadByte(f)) >= 0 ) + { + char *data = (char *) image->pixels; + data[xpos + ypos * image->pitch] = (char) v; + + ++xpos; + if( xpos == len ) + { + xpos = 0; + if( interlace ) + { + int step[] = { 8, 8, 4, 2 }; + ypos += step[pass]; + + if( ypos >= height ) + { + ++pass; + if( pass == 4 ) + return image; + int start[] = { 0, 4, 2, 1 }; + ypos = start[pass]; + } + } else { + ++ypos; + } + } + if (ypos >= height) + break; + } + + return image; +} + +/* + * Copyright 1990, 1991, 1993 David Koblas. + * Copyright 1996 Torsten Martinsen. + * Permission to use, copy, modify, and distribute this software + * and its documentation for any purpose and without fee is hereby + * granted, provided that the above copyright notice appear in all + * copies and that both that copyright notice and this permission + * notice appear in supporting documentation. This software is + * provided "as is" without express or implied warranty. + */ + +/* + * Copyright (c) 2004 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/RageSurface_Load_GIF.h b/stepmania/src/RageSurface_Load_GIF.h new file mode 100644 index 0000000000..3813d0961a --- /dev/null +++ b/stepmania/src/RageSurface_Load_GIF.h @@ -0,0 +1,33 @@ +#ifndef RAGE_SURFACE_LOAD_GIF_H +#define RAGE_SURFACE_LOAD_GIF_H + +#include "SDL_utils.h" + +SDL_Surface *RageSurface_Load_GIF( const CString &sPath, CString &error ); + +#endif + +/* + * (c) 2004 Glenn Maynard + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons to + * whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + * THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS + * INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT + * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS + * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index e239d60632..a83b21e5d2 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -65,7 +65,7 @@ IntDir=.\../Debug6 TargetDir=\temp\stepmania\Program TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -82,22 +82,22 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "../Debug_Xbox" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /incremental:no /debug /machine:I386 /subsystem:xbox /fixed:no /TMP # ADD LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /map /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmt" /out:"../StepManiaXbox-debug.exe" /subsystem:xbox /fixed:no /TMP # SUBTRACT LINK32 /incremental:no -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_XBOX" /D "_DEBUG" /YX /FD /G6 /Ztmp /c -# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "_DEBUG" /D "_XBOX" /D "OGG_ONLY" /D "DEBUG" /FR /YX"global.h" /FD /G6 /Ztmp /c +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /stack:0x10000 /debug /out:"../default.xbe" +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO # Begin Special Build Tool PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -138,7 +138,7 @@ IntDir=.\../Release6 TargetDir=\temp\stepmania\Program TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi # End Special Build Tool @@ -156,23 +156,23 @@ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania # PROP Intermediate_Dir "../Release_Xbox" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -XBCP=xbecopy.exe -# ADD BASE XBCP /NOLOGO -# ADD XBCP /NOLOGO -XBE=imagebld.exe -# ADD BASE XBE /nologo /stack:0x10000 /debug -# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" +CPP=cl.exe +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 $(intdir)\verstub.obj xapilibd.lib d3d8d.lib d3dx8d.lib xgraphicsd.lib dsoundd.lib dmusicd.lib xnetd.lib xboxkrnl.lib /nologo /pdb:"../debug6/StepMania-debug.pdb" /map /debug /machine:IX86 /nodefaultlib:"libcmtd.lib" /out:"../StepMania-debug.exe" # SUBTRACT BASE LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # ADD LINK32 $(intdir)\verstub.obj xapilib.lib d3d8.lib d3dx8.lib xgraphics.lib dsound.lib dmusic.lib xnet.lib xboxkrnl.lib libcmt.lib /nologo /incremental:no /map /machine:I386 /nodefaultlib:"libc" /nodefaultlib:"libcmtd" /out:"../StepManiaXbox.exe" /subsystem:xbox /fixed:no /TMP /OPT:REF # SUBTRACT LINK32 /pdb:none /debug -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -CPP=cl.exe -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /D "WIN32" /D "_XBOX" /D "_DEBUG" /Fr /YX"global.h" /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "." /I "SDL-1.2.5\include" /I "SDL_image-1.2" /I "plib-1.6.0" /I "SDL_sound-1.0.0" /I "vorbis" /D "WIN32" /D "NDEBUG" /D "_XBOX" /FR /YX /FD /c +XBE=imagebld.exe +# ADD BASE XBE /nologo /stack:0x10000 /debug +# ADD XBE /nologo /testid:"123456" /stack:0x10000 /debug /out:"../default.xbe" +XBCP=xbecopy.exe +# ADD BASE XBCP /NOLOGO +# ADD XBCP /NOLOGO # Begin Special Build Tool PreLink_Cmds=disasm\verinc cl /Zl /nologo /c PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -944,6 +944,25 @@ SOURCE=.\RageSurface_Load.h # End Source File # Begin Source File +SOURCE=.\RageSurface_Load_GIF.cpp + +!IF "$(CFG)" == "StepMania - Win32 Debug" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" + +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Release" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\RageSurface_Load_GIF.h +# End Source File +# Begin Source File + SOURCE=.\RageSurface_Load_PNG.cpp !IF "$(CFG)" == "StepMania - Win32 Debug" diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index b09d93faca..e298e7ed5c 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -1893,6 +1893,12 @@ cl /Zl /nologo /c verstub.cpp /Fo"$(IntDir)"\ + + + +