有哪位高手知道传奇3里,*.wil文件的格式??

oliverliye 2003-12-24 04:46:53
传奇2的wil文件格式,我已经分析明白了,但是传奇3的wil文件格式怎么也分析不出来。
传奇2的和传奇3的wil文件格式差不多。请高手指教!!


传奇2wil文件头长是1080(包含调色板),然后是图片的宽和长,后面的四的字节不知道有什么用,后面的就是位图数据了.

传奇3wil文件头,有的长度是0x20,有的长度是0x1c,我不知道为什么有两种长度的文件头???
最重要的就是宽*长*2居然不和位图数据段的确良大小一样?????

(注:传奇2是8位的传奇3是16位的)
...全文
506 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsaturn 2004-01-07
  • 打赏
  • 举报
回复
传奇3的代码有压缩的,正在研究中!0x1c的好象不是16位图,有调色板的!
oliverliye 2004-01-03
  • 打赏
  • 举报
回复
请问楼上的朋友,传3的源代码哪里有呀?
pumaden 2003-12-29
  • 打赏
  • 举报
回复
class CWHWilImageData
{
private:
protected:
BOOL m_bIsMemMapped; // 皋葛府甘荤侩咯何.
BOOL m_bIsCompressed; // 拘绵咯何.

LPBYTE m_pbStartData; // 单捞鸥狼 矫累林家.(傈眉 单捞鸥康开篮 颇老农扁客 鞍促.)

INT m_nCurrImageIdx; // 泅犁 啊府虐绊 乐绰 牢郸胶.


public:
WIXIMAGEINFO m_stWixImgaeInfo; // Wix 颇老单捞鸥.
NEWWIXIMAGEINFO m_stNewWixImgaeInfo;

LPWILIMAGEINFO m_lpstCurrWilImageInfo; // 泅犁 廓颇老狼 沥焊甫 啊府虐绰 器牢磐.
LPNEWWILIMAGEINFO m_lpstNewCurrWilImageInfo;

BYTE* m_pbCurrImage; // 泅犁 廓颇老狼 捞固瘤甫 啊府虐绰 器牢磐.
TCHAR m_szWilFileName[MAX_PATH];

CWHWilImageData();
~CWHWilImageData();

BOOL NewLoad(CHAR* szWilFile, BOOL bIsMemMapped = TRUE, BOOL bComp = TRUE);
BOOL NewSetIndex(DWORD dwIndex); // 寇何俊辑 傈崔罐篮 牢郸胶甫 啊瘤绊 泅犁捞固瘤狼 沥焊甫 啊府虐绰 林家甫 Setting茄促.


BOOL Load(CHAR* szWilFile, BOOL bIsMemMapped = TRUE, BOOL bComp = TRUE);
VOID Init();
VOID Destroy();
VOID SetIndex(INT nIndex); // 寇何俊辑 傈崔罐篮 牢郸胶甫 啊瘤绊 泅犁捞固瘤狼 沥焊甫 啊府虐绰 林家甫 Setting茄促.
};

#include "StdAfx.h"



CWHWilImageData::CWHWilImageData()
{
Init();
}


CWHWilImageData::~CWHWilImageData()
{
Destroy();
}


VOID CWHWilImageData::Init()
{
m_bIsMemMapped = FALSE;
m_bIsCompressed = FALSE;
m_pbStartData = NULL;

ZeroMemory(&m_stWixImgaeInfo, sizeof(WIXIMAGEINFO));

ZeroMemory(&m_stNewWixImgaeInfo, sizeof(WIXIMAGEINFO));

ZeroMemory(&m_szWilFileName, sizeof(MAX_PATH));

m_nCurrImageIdx = -1; // 檬扁 技泼摹啊 汲沥登瘤 臼篮惑怕.
m_pbCurrImage = NULL;
m_lpstCurrWilImageInfo = NULL;

m_lpstNewCurrWilImageInfo = NULL;
}


VOID CWHWilImageData::Destroy()
{
if ( m_pbStartData )
{
if ( m_bIsMemMapped )
{
UnmapViewOfFile(m_pbStartData);
m_pbStartData = NULL;
}
else
{
SAFE_DELETE(m_pbStartData);
}
}

SAFE_DELETE(m_stWixImgaeInfo.pnPosition);
ZeroMemory(&m_stWixImgaeInfo, sizeof(WIXIMAGEINFO));

SAFE_DELETE(m_stNewWixImgaeInfo.pnPosition);
ZeroMemory(&m_stNewWixImgaeInfo, sizeof(NEWWIXIMAGEINFO));

Init();
}



BOOL CWHWilImageData::Load(CHAR* szWilFile, BOOL bIsMemMapped, BOOL bComp)
{
m_bIsMemMapped = bIsMemMapped;
m_bIsCompressed = bComp;

HANDLE hWilFile;
HANDLE hWixFile;
HANDLE hWilMappedFile;
DWORD dwReadLen;
CHAR szWixFile[MAX_PATH];
CHAR szMsg[MAX_PATH];

strcpy(szWixFile, szWilFile);
strcpy(szWixFile+strlen(szWixFile)-3, "wix");
strcpy(m_szWilFileName, szWilFile);

hWixFile= CreateFile(szWixFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if ( hWixFile )
{
ReadFile(hWixFile, &m_stWixImgaeInfo, sizeof(WIXIMAGEINFO)-sizeof(INT*), &dwReadLen, NULL);

m_stWixImgaeInfo.pnPosition = new INT[m_stWixImgaeInfo.nIndexCount];
ReadFile(hWixFile, m_stWixImgaeInfo.pnPosition, sizeof(INT)*m_stWixImgaeInfo.nIndexCount, &dwReadLen, NULL);

hWilFile = CreateFile(szWilFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

if ( hWilFile != INVALID_HANDLE_VALUE )
{
// 皋葛府甘屈怕老锭.
if ( m_bIsMemMapped )
{
hWilMappedFile = CreateFileMapping(hWilFile, NULL, PAGE_READONLY, NULL, NULL, NULL);

m_pbStartData = (BYTE*)MapViewOfFile(hWilMappedFile, FILE_MAP_READ, NULL, NULL, NULL);

if ( !m_pbStartData )
{
// Debug
MessageBox(NULL, "CreateFileMapping Failed", "Mir2EX :: Error", MB_ICONERROR | MB_OK);
CloseHandle(hWilFile);
CloseHandle(hWixFile);
return FALSE;
}
CloseHandle(hWilMappedFile);
}
else
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hWilFile, NULL);
m_pbStartData = new BYTE[dwFileSize];
ReadFile(hWilFile, m_pbStartData, dwFileSize, &dwReadLen, NULL);
}

SetIndex(0); // 0锅 牢郸胶肺 技泼茄促.
CloseHandle(hWilFile);
CloseHandle(hWixFile);
return TRUE;
}

wsprintf(szMsg, "Cannot find %s file", szWixFile);
// Debug
MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
CloseHandle(hWixFile);
return FALSE;
}

wsprintf(szMsg, "Cannot find %s file", szWixFile);
// Debug
MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);

return FALSE;

}



VOID CWHWilImageData::SetIndex(INT nIndex)
{
if ( m_nCurrImageIdx == nIndex ) return; // 货肺 Setting登绰 Index啊 函拳啊 绝促搁.

m_nCurrImageIdx = nIndex;

BYTE* pbTmpData = (BYTE*)(m_pbStartData + m_stWixImgaeInfo.pnPosition[nIndex]);

m_lpstCurrWilImageInfo = (LPWILIMAGEINFO)pbTmpData;

if ( m_bIsCompressed )
m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(WILIMAGEINFO));
else
m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(WILIMAGEINFO) - sizeof(DWORD));
}


BOOL CWHWilImageData::NewSetIndex(DWORD dwIndex)
{
// if ( m_nCurrImageIdx == nIndex || !m_stNewWixImgaeInfo.pnPosition[nIndex] ) return; // 货肺 Setting登绰 Index啊 函拳啊 绝促搁.

m_nCurrImageIdx = dwIndex;

if ( m_stNewWixImgaeInfo.pnPosition[dwIndex] != 0 && dwIndex >= 0 && (INT)dwIndex < m_stNewWixImgaeInfo.nIndexCount )
{
BYTE* pbTmpData = (BYTE*)(m_pbStartData + m_stNewWixImgaeInfo.pnPosition[dwIndex]);

m_lpstNewCurrWilImageInfo = (LPNEWWILIMAGEINFO)pbTmpData;

if ( m_bIsCompressed )
m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(NEWWILIMAGEINFO));
else
m_pbCurrImage = (BYTE*)(pbTmpData + sizeof(NEWWILIMAGEINFO) - sizeof(DWORD));

return TRUE;
}
return FALSE;
}


BOOL CWHWilImageData::NewLoad(CHAR* szWilFile, BOOL bIsMemMapped, BOOL bComp)
{
m_bIsMemMapped = bIsMemMapped;
m_bIsCompressed = bComp;

HANDLE hWilFile;
HANDLE hWixFile;
HANDLE hWilMappedFile;
DWORD dwReadLen;
CHAR szWixFile[MAX_PATH];
CHAR szMsg[MAX_PATH];

strcpy(szWixFile, szWilFile);
strcpy(szWixFile+strlen(szWixFile)-3, "wix");
strcpy(m_szWilFileName, szWilFile);

hWixFile= CreateFile(szWixFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if ( hWixFile )
{
ReadFile(hWixFile, &m_stNewWixImgaeInfo, sizeof(NEWWIXIMAGEINFO)-sizeof(INT*), &dwReadLen, NULL);

m_stNewWixImgaeInfo.pnPosition = new INT[m_stNewWixImgaeInfo.nIndexCount];
ReadFile(hWixFile, m_stNewWixImgaeInfo.pnPosition, sizeof(INT)*m_stNewWixImgaeInfo.nIndexCount, &dwReadLen, NULL);

hWilFile = CreateFile(szWilFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );

if ( hWilFile != INVALID_HANDLE_VALUE )
{
// 皋葛府甘屈怕老锭.
if ( m_bIsMemMapped )
{
hWilMappedFile = CreateFileMapping(hWilFile, NULL, PAGE_READONLY, NULL, NULL, NULL);

m_pbStartData = (BYTE*)MapViewOfFile(hWilMappedFile, FILE_MAP_READ, NULL, NULL, NULL);

if ( !m_pbStartData )
{
// Debug
MessageBox(NULL, "CreateFileMapping Failed", "Mir2EX :: Error", MB_ICONERROR | MB_OK);
CloseHandle(hWilFile);
CloseHandle(hWixFile);
return FALSE;
}
CloseHandle(hWilMappedFile);
}
else
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hWilFile, NULL);
m_pbStartData = new BYTE[dwFileSize];
ReadFile(hWilFile, m_pbStartData, dwFileSize, &dwReadLen, NULL);
}

NewSetIndex(0); // 0锅 牢郸胶肺 技泼茄促.
CloseHandle(hWilFile);
return TRUE;
}

wsprintf(szMsg, "Cannot find %s file", szWixFile);
// Debug
MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);
CloseHandle(hWixFile);
return FALSE;
}

wsprintf(szMsg, "Cannot find %s file", szWixFile);
// Debug
MessageBox(NULL, szMsg, "Mir2EX :: Error", MB_ICONERROR | MB_OK);

return FALSE;

}

据说从传3的源代码COPY的一部分,可以分析一下。
core 2003-12-24
  • 打赏
  • 举报
回复
很怀疑你对传奇2的分析,是自己分析出来的吗?怎么结果和网上说的一样?

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧