erni_hax

NSound | Parse snd.pck

Jul 29th, 2015
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <fstream>
  4. #include <string>
  5. #include <direct.h>
  6. #define u8 unsigned char
  7. #define u16 unsigned short
  8. #define u32 unsigned int
  9. #define u64 unsigned long long
  10. typedef struct {
  11.     u8 NameLenght;
  12.     u8 NameBuffer[0x43];
  13.     u32 FileOffset;
  14.     u32 FileLenght;
  15. } WAVFile;
  16. void main() {
  17.     std::string fileName, folderName;
  18.     FILE *file;
  19.     std::cout
  20.         << " NSound - ernilos" << std::endl
  21.         << " NoSsT! Project" << std::endl
  22.         << "-----------------------------------------------------" << std::endl
  23.         << " File to unpack: ";
  24.     std::cin >> fileName;
  25.     std::cout
  26.         << " Unpack to folder: ";
  27.     std::cin >> folderName;
  28.     std::cout
  29.         << "-----------------------------------------------------" << std::endl
  30.         << " Unpacking \"" << fileName << "\"..." << std::endl;
  31.     if ((file = fopen(fileName.c_str(), "rb+")) != NULL) {
  32.         _mkdir(folderName.c_str());
  33.         char *FILE_HEADER = (char*)malloc(0x12);
  34.         u32 FILE_AMOUNT;
  35.         fread(FILE_HEADER, 0x11, 1, file);
  36.         FILE_HEADER[0x11] = 0;
  37.         fseek(file, 0x18, SEEK_SET);
  38.         fread(&FILE_AMOUNT, 4, 1, file);
  39.         std::cout
  40.             << " File header: " << FILE_HEADER << std::endl
  41.             << " File amount: " << FILE_AMOUNT << std::endl
  42.             << std::hex;
  43.         FILE *fOut;
  44.         std::stringstream ss;
  45.         for (int i = 0; i < FILE_AMOUNT; i++) {
  46.             int tSeek;
  47.             WAVFile wavFile;
  48.             fread(&wavFile, sizeof(wavFile), 1, file);
  49.             ss << folderName << "\\" << std::string((const char*)wavFile.NameBuffer).substr(0, wavFile.NameLenght);
  50.             fOut = fopen(ss.str().c_str(), "wb+");
  51.             ss.str("");
  52.             tSeek = ftell(file);
  53.             fseek(file, wavFile.FileOffset, SEEK_SET);
  54.             char *memory = (char*)malloc(wavFile.FileLenght + 1);
  55.             fread(memory, wavFile.FileLenght, 1, file);
  56.             fwrite(memory, wavFile.FileLenght, 1, fOut);
  57.             fclose(fOut);
  58.             std::cout
  59.                 << "[" << std::string((const char*)wavFile.NameBuffer).substr(0, wavFile.NameLenght) << "]" << std::endl
  60.                 << "    File offset: 0x" << wavFile.FileOffset << std::endl
  61.                 << "    File lenght: 0x" << wavFile.FileLenght << std::endl << std::endl;
  62.             fseek(file, tSeek, SEEK_SET);
  63.         }
  64.         std::cout
  65.             << "-----------------------------------------------------" << std::endl
  66.             << " All files unpacked! Press a key to exit..." << std::endl;
  67.         std::getchar();
  68.         exit(EXIT_SUCCESS);
  69.     }
  70.     else {
  71.         std::cout
  72.             << " Canno't open \"" << fileName << "\" Press a key to exit...";
  73.         std::getchar();
  74.         exit(EXIT_FAILURE);
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment