24.11.2014, 18:02
|
#7
|
Заинтересовавшийся
Регистрация: 20.10.2014
Адрес: Урал
Возраст: 36
Сообщений: 21
Отблагодарили 6 раз(а)
Рейтинг мнений:
|
Re: Распаковка PAK файлов игры Icarus Online
А есть у кого-нибудь информация о строении SXB файлов?
Добавлено через 15 часов 20 минут
Что-то накидал. Даже. вроде. работает:
Свернуть ↑
Код:
FILE* hSXB; // Хэндл открытого файла
char* sxb_buf;
unsigned __int32 all_elements_size;
unsigned __int32 data_step;
#pragma pack(1)
typedef struct HEAD
{
unsigned __int16 ver;
char key[32];
unsigned __int16 num_elements;
} HEAD;
typedef struct ELEMENT
{
unsigned __int32 step1;
unsigned __int32 step2;
unsigned __int32 step3;
unsigned __int32 step4;
unsigned __int32 step5;
} ELEMENT;
typedef struct ELMDATA
{
WCHAR dat1[256];
WCHAR dat2[256];
WCHAR dat3[256];
WCHAR dat4[256];
WCHAR dat5[256];
} ELMDATA;
#pragma pack()
HEAD* head;
ELEMENT* elm;
ELMDATA* elmdata;
//=================================================================================
// Открывает файл и заполняет окна
//
void OpenSXBFile(char* filename)
{
char msg[1024];
hSXB = fopen(filename, "rb");
if (hSXB != NULL)
{
fseek(hSXB, 0, SEEK_END);
int size = ftell(hSXB);
fseek(hSXB, 0, SEEK_SET);
if (size > sizeof(HEAD))
{
head = new HEAD;
fread(head, sizeof(HEAD), 1, hSXB);
elm = new ELEMENT[head->num_elements];
fread(elm, sizeof(ELEMENT)*head->num_elements, 1, hSXB);
fread((void*)&all_elements_size, 4, 1, hSXB);
data_step = ftell(hSXB);
elmdata = new ELMDATA[head->num_elements];
for (int i = 0; i < head->num_elements; i++)
{
memset(elmdata[i].dat1, 0, 256);
memset(elmdata[i].dat2, 0, 256);
memset(elmdata[i].dat3, 0, 256);
memset(elmdata[i].dat4, 0, 256);
memset(elmdata[i].dat5, 0, 256);
fread(elmdata[i].dat1, elm[i].step2 * 2 - elm[i].step1 * 2, 1, hSXB);
fread(elmdata[i].dat2, elm[i].step3 * 2 - elm[i].step2 * 2, 1, hSXB);
fread(elmdata[i].dat3, elm[i].step4 * 2 - elm[i].step3 * 2, 1, hSXB);
fread(elmdata[i].dat4, elm[i].step5 * 2 - elm[i].step4 * 2, 1, hSXB);
fread(elmdata[i].dat5, 2, 1, hSXB);
}
}
else
{
MessageBox(hwndMain, "Структура файла не распознана", "Ошибка", MB_OK | MB_ICONERROR);
}
}
else
{
sprintf(msg, "Не удалось открыть файл: %s", filename);
MessageBox(hwndMain, msg, "Ошибка", MB_OK | MB_ICONERROR);
}
}
Свернуть ↑Развернуть ↓
__________________
DI; HALT; RET ))))
Последний раз редактировалось Tahoma; 25.11.2014 в 09:40.
Причина: Добавлено сообщение
|
|
|