1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-26 08:41:13 +02:00
vcmi/hch/CLodHandler.h
Michał W. Urbańczyk 2f2169b71f * improved slider ( #58 )
* fixed problems with horde buildings (won't block original dwellings)
* giving primary skill when hero get level (but there is still no dialog)
* if an upgraded creature is available it'll be shown as the first in a recruitment window
* creature levels not messed in Fortress
* war machines are added to the hero's inventory, not to the garrison
* support for H3-style PCX graphics in Data/ (not tested)
* started doing support for ZSoft PCX graphics in Data/
* VCMI won't crash when is unable to initialize audio system
* fixed displaying wrong town defs
* minor fixes and improvements
2008-05-03 15:30:11 +00:00

85 lines
2.5 KiB
C++

#ifndef CLODHANDLER_H
#define CLODHANDLER_H
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "zlib.h"
#include "../nodrze.h"
#include "SDL.h"
class CDefHandler;
class CDefEssential;
enum Epcxformat {PCX8B, PCX24B};
namespace NLoadHandlerHelp
{
const int dmHelp=0, dmNoExtractingMask=1;
//std::string P1,P2,CurDir;
const int fCHUNK = 50000;
};
struct Entry
{
unsigned char name[12], //filename
hlam_1[4], //???
hlam_2[4]; //probably type of file
std::string nameStr;
int offset, //from beginning
realSize, //size without compression
size; //and with
bool operator<(const std::string & comp) const
{
return nameStr<comp;
}
bool operator<(const Entry & comp) const
{
return nameStr<comp.nameStr;
}
Entry(std::string con): nameStr(con){};
//Entry(unsigned char ): nameStr(con){};
Entry(){};
};
class CPCXConv
{
public:
unsigned char * pcx, *bmp;
int pcxs, bmps;
void fromFile(std::string path);
void saveBMP(std::string path);
void openPCX(char * PCX, int len);
void openPCX();
void convert();
SDL_Surface * getSurface(); //for standard H3 PCX
SDL_Surface * getSurfaceZ(); //for ZSoft PCX
CPCXConv(){pcx=bmp=NULL;pcxs=bmps=0;};
~CPCXConv(){if (pcxs) delete[] pcx; if(bmps) delete[] bmp;}
};
class CLodHandler
{
private:
FILE* FLOD;
public:
nodrze<Entry> entries;
unsigned int totalFiles;
int readNormalNr (unsigned char* bufor, int bytCon, bool cyclic=false); //lod header reading helper
int decompress (unsigned char * source, int size, int realSize, std::ofstream & dest); //main decompression function
int decompress (unsigned char * source, int size, int realSize, std::string & dest); //main decompression function
int infm(FILE *source, FILE *dest, int wBits = 15); //zlib handler
int infs(unsigned char * in, int size, int realSize, std::ofstream & out, int wBits=15); //zlib fast handler
int infs2(unsigned char * in, int size, int realSize, unsigned char*& out, int wBits=15); //zlib fast handler
std::vector<CDefHandler *> extractManyFiles(std::vector<std::string> defNamesIn); //extrats given files (defs only)
CDefHandler * giveDef(std::string defName);
CDefEssential * giveDefEss(std::string defName);
std::string getTextFile(std::string name); //extracts one file
void extract(std::string FName);
void extractFile(std::string FName, std::string name); //extracts a specific file
void init(std::string lodFile);
SDL_Surface * loadBitmap(std::string fname);
};
#endif //CLODHANDLER_H