diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj
index 9ce0ece45..7a8d26a17 100644
--- a/desmume/src/windows/DeSmuME_2005.vcproj
+++ b/desmume/src/windows/DeSmuME_2005.vcproj
@@ -960,6 +960,10 @@
RelativePath=".\File_Extractor\fex\fex.cpp"
>
+
+
diff --git a/desmume/src/windows/FEX_Interface.cpp b/desmume/src/windows/FEX_Interface.cpp
index 0b3714607..9c80e0680 100644
--- a/desmume/src/windows/FEX_Interface.cpp
+++ b/desmume/src/windows/FEX_Interface.cpp
@@ -223,6 +223,7 @@ ArchiveFile::ArchiveFile(const char* filename)
if (err) break;
item.size = fex_size(object);
+ item.offset = fex_tell_arc(object);
fex_next(object);
}
@@ -302,7 +303,7 @@ int ArchiveFile::ExtractItem(int index, unsigned char* outBuffer, int bufSize) c
fex_err_t err = fex_open_type( &object, m_filename, s_formatInfos[m_typeIndex].type );
if ( !err )
{
- if ( index != 0 ) err = fex_seek_arc( object, index );
+ if ( index != 0 ) err = fex_seek_arc( object, item.offset );
if ( !err )
{
err = fex_read( object, outBuffer, item.size );
@@ -348,7 +349,7 @@ int ArchiveFile::ExtractItem(int index, const char* outFilename) const
fex_err_t err = fex_open_type( &object, m_filename, s_formatInfos[m_typeIndex].type );
if ( !err )
{
- if ( index != 0 ) err = fex_seek_arc( object, index );
+ if ( index != 0 ) err = fex_seek_arc( object, item.offset );
if ( !err )
{
unsigned char * buffer = new unsigned char[item.size];
diff --git a/desmume/src/windows/FEX_Interface.h b/desmume/src/windows/FEX_Interface.h
index 930f01d9b..8bf504b3d 100644
--- a/desmume/src/windows/FEX_Interface.h
+++ b/desmume/src/windows/FEX_Interface.h
@@ -50,6 +50,7 @@ protected:
{
int size;
char* name;
+ s64 offset;
};
ArchiveItem* m_items;
int m_numItems;