mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Na początek.
This commit is contained in:
		
							
								
								
									
										337
									
								
								CAmbarCendamo.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								CAmbarCendamo.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,337 @@ | ||||
| #include "stdafx.h" | ||||
| #include "CAmbarCendamo.h" | ||||
| #include "CSemiDefHandler.h" | ||||
| #include <fstream> | ||||
| #include <set> | ||||
| CAmbarCendamo::CAmbarCendamo (const char * tie) | ||||
| { | ||||
| 	is = new std::ifstream(); | ||||
| 	is -> open(tie,std::ios::binary); | ||||
| 	is->seekg(0,std::ios::end); // na koniec | ||||
| 	andame = is->tellg();  // read length | ||||
| 	is->seekg(0,std::ios::beg); // wracamy na poczatek | ||||
| 	bufor = new unsigned char[andame]; // allocate memory  | ||||
| 	is->read((char*)bufor, andame); // read map file to buffer | ||||
| } | ||||
| CAmbarCendamo::~CAmbarCendamo ()  | ||||
| {// free memory | ||||
| 	for (int ii=0;ii<map.width;ii++) | ||||
| 		delete map.terrain[ii] ;  | ||||
| 	delete map.terrain; | ||||
| 	delete bufor; | ||||
| } | ||||
| void CAmbarCendamo::teceDef() | ||||
| { | ||||
| 	for (int i=0; i<map.defy.size(); i++) | ||||
| 	{ | ||||
| 		std::ofstream * of = new std::ofstream(map.defy[i].name.c_str()); | ||||
| 		for (int j=0;j<46;j++) | ||||
| 		{ | ||||
| 			(*of) << map.defy[i].bytes[j]<<std::endl; | ||||
| 		} | ||||
| 		delete of; | ||||
| 	} | ||||
| } | ||||
| void CAmbarCendamo::deh3m() | ||||
| { | ||||
| 	map.version = (Eformat)bufor[0]; //wersja mapy | ||||
| 	map.areAnyPLayers = bufor[4]; | ||||
| 	map.height = map.width = bufor[5]; // wymiary mapy | ||||
| 	map.twoLevel = bufor[9]; //czy sa lochy | ||||
| 	map.terrain = new TerrainTile*[map.width]; // allocate memory  | ||||
| 	for (int ii=0;ii<map.width;ii++) | ||||
| 		map.terrain[ii] = new TerrainTile[map.height]; // allocate memory  | ||||
| 	if (map.twoLevel) | ||||
| 	{ | ||||
| 		map.undergroungTerrain = new TerrainTile*[map.width]; // allocate memory  | ||||
| 		for (int ii=0;ii<map.width;ii++) | ||||
| 			map.undergroungTerrain[ii] = new TerrainTile[map.height]; // allocate memory  | ||||
| 	} | ||||
| 	int length = bufor[10]; //name length | ||||
| 	int i=14, pom;  | ||||
| 	while (i-14<length)	//read name | ||||
| 		map.name+=bufor[i++]; | ||||
| 	length = bufor[i] + bufor[i+1]*256; //description length | ||||
| 	i+=4; | ||||
| 	for (pom=0;pom<length;pom++) | ||||
| 		map.description+=bufor[i++]; | ||||
| 	map.difficulty = bufor[i++]; // reading map difficulty | ||||
| 	map.levelLimit = bufor[i++]; // hero level limit | ||||
| 	for (pom=0;pom<8;pom++) | ||||
| 	{ | ||||
| 		map.players[pom].canHumanPlay = bufor[i++]; | ||||
| 		map.players[pom].canComputerPlay = bufor[i++]; | ||||
| 		if (!(map.players[pom].canHumanPlay || map.players[pom].canComputerPlay)) | ||||
| 		{ | ||||
| 			i+=13; | ||||
| 			continue; | ||||
| 		} | ||||
|  | ||||
| 		map.players[pom].AITactic = bufor[i++]; | ||||
| 		if (bufor[i++]) | ||||
| 		{ | ||||
| 			map.players[pom].allowedFactions = 0; | ||||
| 			map.players[pom].allowedFactions += bufor[i++]; | ||||
| 			map.players[pom].allowedFactions += (bufor[i++])*256; | ||||
| 		} | ||||
| 		else  | ||||
| 		{ | ||||
| 			map.players[pom].allowedFactions = 511; | ||||
| 			i+=2; | ||||
| 		} | ||||
| 		map.players[pom].isFactionRandom = bufor[i++]; | ||||
| 		i+=2; //unknown bytes | ||||
| 		int unknown = bufor[i++]; | ||||
| 		if (unknown == 255) | ||||
| 		{ | ||||
| 			map.players[pom].mainHeroPortrait = 255; | ||||
| 			i+=5; | ||||
| 			continue; | ||||
| 		} | ||||
| 		map.players[pom].mainHeroPortrait = bufor[i++]; | ||||
| 		int nameLength = bufor[i++]; | ||||
| 		i+=3;  | ||||
| 		for (int pp=0;pp<nameLength;pp++) | ||||
| 			map.players[pom].mainHeroName+=bufor[i++]; | ||||
| 		i++; ////unknown byte | ||||
| 		int heroCount = bufor[i++]; | ||||
| 		i+=3; | ||||
| 		for (int pp=0;pp<heroCount;pp++) | ||||
| 		{ | ||||
| 			SheroName vv; | ||||
| 			vv.heroID=bufor[i++]; | ||||
| 			int hnl = bufor[i++]; | ||||
| 			i+=3; | ||||
| 			for (int zz=0;zz<hnl;zz++) | ||||
| 			{ | ||||
| 				vv.heroName+=bufor[i++]; | ||||
| 			} | ||||
| 			map.players[pom].heroesNames.push_back(vv); | ||||
| 		} | ||||
| 	} | ||||
| 	map.victoryCondition = (EvictoryConditions)bufor[i++]; | ||||
| 	if (map.victoryCondition != winStandard) //specific victory conditions | ||||
| 	{ | ||||
| 		int nr; | ||||
| 		switch (map.victoryCondition) //read victory conditions | ||||
| 		{ | ||||
| 		case artifact: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon0(); | ||||
| 				((VicCon0*)map.vicConDetails)->ArtifactID = bufor[i+2]; | ||||
| 				nr=2; | ||||
| 				break; | ||||
| 			} | ||||
| 		case gatherTroop: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon1(); | ||||
| 				int temp1 = bufor[i+2]; | ||||
| 				int temp2 = bufor[i+3]; | ||||
| 				((VicCon1*)map.vicConDetails)->monsterID = bufor[i+2]; | ||||
| 				((VicCon1*)map.vicConDetails)->neededQuantity=readNormalNr(i+4); | ||||
| 				nr=6; | ||||
| 				break; | ||||
| 			} | ||||
| 		case gatherResource: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon2(); | ||||
| 				((VicCon2*)map.vicConDetails)->resourceID = bufor[i+2]; | ||||
| 				((VicCon2*)map.vicConDetails)->neededQuantity=readNormalNr(i+3); | ||||
| 				nr=5; | ||||
| 				break; | ||||
| 			} | ||||
| 		case buildCity: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon3(); | ||||
| 				((VicCon3*)map.vicConDetails)->posOfCity.x = bufor[i+2]; | ||||
| 				((VicCon3*)map.vicConDetails)->posOfCity.y = bufor[i+3]; | ||||
| 				((VicCon3*)map.vicConDetails)->posOfCity.z = bufor[i+4]; | ||||
| 				((VicCon3*)map.vicConDetails)->councilNeededLevel = bufor[i+5]; | ||||
| 				((VicCon3*)map.vicConDetails)->fortNeededLevel = bufor[i+6]; | ||||
| 				nr=5; | ||||
| 				break; | ||||
| 			} | ||||
| 		case buildGrail: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon4(); | ||||
| 				if (bufor[i+4]>2) | ||||
| 					((VicCon4*)map.vicConDetails)->anyLocation = true; | ||||
| 				else | ||||
| 				{ | ||||
| 					((VicCon4*)map.vicConDetails)->whereBuildGrail.x = bufor[i+2]; | ||||
| 					((VicCon4*)map.vicConDetails)->whereBuildGrail.y = bufor[i+3]; | ||||
| 					((VicCon4*)map.vicConDetails)->whereBuildGrail.z = bufor[i+4]; | ||||
| 				} | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case beatHero: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon5(); | ||||
| 				((VicCon5*)map.vicConDetails)->locationOfHero.x = bufor[i+2]; | ||||
| 				((VicCon5*)map.vicConDetails)->locationOfHero.y = bufor[i+3]; | ||||
| 				((VicCon5*)map.vicConDetails)->locationOfHero.z = bufor[i+4];				 | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case captureCity: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon6(); | ||||
| 				((VicCon6*)map.vicConDetails)->locationOfTown.x = bufor[i+2]; | ||||
| 				((VicCon6*)map.vicConDetails)->locationOfTown.y = bufor[i+3]; | ||||
| 				((VicCon6*)map.vicConDetails)->locationOfTown.z = bufor[i+4];				 | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case beatMonster: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCon7(); | ||||
| 				((VicCon7*)map.vicConDetails)->locationOfMonster.x = bufor[i+2]; | ||||
| 				((VicCon7*)map.vicConDetails)->locationOfMonster.y = bufor[i+3]; | ||||
| 				((VicCon7*)map.vicConDetails)->locationOfMonster.z = bufor[i+4];				 | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case takeDwellings: | ||||
| 			{		 | ||||
| 				map.vicConDetails = new CspecificVictoryConidtions(); | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case takeMines: | ||||
| 			{	 | ||||
| 				map.vicConDetails = new CspecificVictoryConidtions();	 | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		case transportItem: | ||||
| 			{ | ||||
| 				map.vicConDetails = new VicCona(); | ||||
| 				((VicCona*)map.vicConDetails)->artifactID =  bufor[i+2]; | ||||
| 				((VicCona*)map.vicConDetails)->destinationPlace.x = bufor[i+3]; | ||||
| 				((VicCona*)map.vicConDetails)->destinationPlace.y = bufor[i+4]; | ||||
| 				((VicCona*)map.vicConDetails)->destinationPlace.z = bufor[i+5];				 | ||||
| 				nr=3; | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		map.vicConDetails->allowNormalVictory = bufor[i++]; | ||||
| 		map.vicConDetails->appliesToAI = bufor[i++]; | ||||
| 		i+=nr; | ||||
| 	} | ||||
| 	map.lossCondition.typeOfLossCon = (ElossCon)bufor[i++]; | ||||
| 	switch (map.lossCondition.typeOfLossCon) //read loss conditions | ||||
| 	{ | ||||
| 	case lossCastle: | ||||
| 		  { | ||||
| 			  map.lossCondition.castlePos.x=bufor[i++]; | ||||
| 			  map.lossCondition.castlePos.y=bufor[i++]; | ||||
| 			  map.lossCondition.castlePos.z=bufor[i++]; | ||||
| 		  } | ||||
| 	case lossHero: | ||||
| 		  { | ||||
| 			  map.lossCondition.heroPos.x=bufor[i++]; | ||||
| 			  map.lossCondition.heroPos.y=bufor[i++]; | ||||
| 			  map.lossCondition.heroPos.z=bufor[i++]; | ||||
| 		  } | ||||
| 	case timeExpires: | ||||
| 		{ | ||||
| 			map.lossCondition.timeLimit = readNormalNr(i++,2); | ||||
| 		} | ||||
| 	} | ||||
| 	i+=88; | ||||
| 	int rumNr = readNormalNr(i,4);i+=4; | ||||
| 	for (int it=0;it<rumNr;it++) | ||||
| 	{ | ||||
| 		Rumor ourRumor; | ||||
| 		int nameL = readNormalNr(i,4);i+=4; //read length of name of rumor | ||||
| 		for (int zz=0; zz<nameL; zz++) | ||||
| 			ourRumor.name+=bufor[i++]; | ||||
| 		nameL = readNormalNr(i,4);i+=4; //read length of rumor | ||||
| 		for (int zz=0; zz<nameL; zz++) | ||||
| 			ourRumor.text+=bufor[i++]; | ||||
| 		map.rumors.push_back(ourRumor); //add to our list | ||||
| 	} | ||||
| 	i+=156; | ||||
| 	for (int c=0; c<map.width; c++) // reading terrain | ||||
| 	{ | ||||
| 		for (int z=0; z<map.height; z++) | ||||
| 		{ | ||||
| 			map.terrain[z][c].tertype = (EterrainType)(bufor[i++]); | ||||
| 			map.terrain[z][c].terview = bufor[i++]; | ||||
| 			map.terrain[z][c].nuine = (Eriver)bufor[i++]; | ||||
| 			map.terrain[z][c].rivDir = bufor[i++]; | ||||
| 			map.terrain[z][c].malle = (Eroad)bufor[i++]; | ||||
| 			map.terrain[z][c].roadDir = bufor[i++]; | ||||
| 			map.terrain[z][c].siodmyTajemniczyBajt = bufor[i++]; | ||||
| 		} | ||||
| 	} | ||||
| 	if (map.twoLevel) // read underground terrain | ||||
| 	{ | ||||
| 		for (int z=0; z<map.width; z++) // reading terrain | ||||
| 		{ | ||||
| 			for (int c=0; c<map.height; c++) | ||||
| 			{ | ||||
| 				map.undergroungTerrain[z][c].tertype = (EterrainType)(bufor[i++]); | ||||
| 				map.undergroungTerrain[z][c].terview = bufor[i++]; | ||||
| 				map.undergroungTerrain[z][c].nuine = (Eriver)bufor[i++]; | ||||
| 				map.undergroungTerrain[z][c].rivDir = bufor[i++]; | ||||
| 				map.undergroungTerrain[z][c].malle = (Eroad)bufor[i++]; | ||||
| 				map.undergroungTerrain[z][c].roadDir = bufor[i++]; | ||||
| 				map.undergroungTerrain[z][c].siodmyTajemniczyBajt = bufor[i++]; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	int defAmount = bufor[i]; // liczba defow | ||||
| 	i+=8; | ||||
| 	for (int idd = 0 ; idd<defAmount; idd++) // reading defs | ||||
| 	{ | ||||
| 		DefInfo vinya; // info about new def | ||||
| 		while (1) // read name | ||||
| 		{ | ||||
| 			if (bufor[i] == '.' && bufor[i+1] == 'd' && bufor[i+2] == 'e' && bufor[i+3] == 'f') | ||||
| 			{ | ||||
| 				vinya.name += ".def"; | ||||
| 				i+=4; | ||||
| 				break; | ||||
| 			} | ||||
| 			vinya.name += bufor[i++]; | ||||
| 		} | ||||
| 		for (int v=0; v<46; v++) // read info | ||||
| 		{ | ||||
| 			vinya.bytes[v] = bufor[i++]; | ||||
| 		} | ||||
| 		map.defy.push_back(vinya); // add this def to the vector | ||||
| 		teceDef(); | ||||
| 	} | ||||
| 	//todo: read events | ||||
| } | ||||
| int CAmbarCendamo::readNormalNr (int pos, int bytCon) | ||||
| { | ||||
| 	int ret=0; | ||||
| 	int amp=1; | ||||
| 	for (int i=0; i<bytCon; i++) | ||||
| 	{ | ||||
| 		ret+=bufor[pos+i]*amp; | ||||
| 		amp*=256; | ||||
| 	} | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
| void CAmbarCendamo::loadDefs() | ||||
| { | ||||
| 	std::set<int> loadedTypes; | ||||
| 	for (int i=0; i<map.width; i++) | ||||
| 	{ | ||||
| 		for (int j=0; j<map.width; j++) | ||||
| 		{ | ||||
| 		if (loadedTypes.find(map.terrain[i][j].tertype)==loadedTypes.end()) | ||||
| 		{ | ||||
| 			CSemiDefHandler  *sdh = new CSemiDefHandler(); | ||||
| 			sdh->openDef(("H3sprite.lod\\"+sdh->nameFromType(map.terrain[i][j].tertype)).c_str()); | ||||
| 			loadedTypes.insert(map.terrain[i][j].tertype); | ||||
| 			defs.push_back(sdh); | ||||
| 		} | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
							
								
								
									
										29
									
								
								CAmbarCendamo.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								CAmbarCendamo.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| #ifndef AMBARCENDD | ||||
| #define AMBARCENDD | ||||
| #include <iostream> | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include "global.h" | ||||
| #include "SDL.h" | ||||
| #include "map.h" | ||||
| #include "CSemiDefHandler.h" | ||||
|  | ||||
| class CAmbarCendamo  | ||||
| { | ||||
| public: | ||||
| /////////////////zmienne skladowe | ||||
| 	Mapa map; | ||||
| 	std::ifstream * is; // stream used to read map file | ||||
| 	int andame; // length of map file | ||||
| 	unsigned char * bufor; // here we store map bytecode | ||||
| 	std::vector<CSemiDefHandler*> defs; | ||||
| /////////////////funkcje skladowe | ||||
| 	CAmbarCendamo (const char * tie); // c-tor; tie is the path of the map file | ||||
| 	~CAmbarCendamo (); // d-tor | ||||
| 	int readNormalNr (int pos, int bytCon=4); //read number from bytCon bytes starting from pos position in buffer  | ||||
| 	void teceDef (); // create files with info about defs | ||||
| 	void deh3m(); // decode file, results are stored in map | ||||
| 	void loadDefs(); | ||||
| }; | ||||
| #endif //AMBARCENDD | ||||
							
								
								
									
										139
									
								
								CSemiDefHandler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								CSemiDefHandler.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,139 @@ | ||||
| #include "stdafx.h" | ||||
| #include "CSemiDefHandler.h" | ||||
| #include <fstream> | ||||
| extern SDL_Surface * ekran; | ||||
| std::string CSemiDefHandler::nameFromType (EterrainType typ) | ||||
| { | ||||
| 	switch(typ) | ||||
| 	{ | ||||
| 		case dirt: | ||||
| 		{ | ||||
| 			return std::string("DIRTTL.DEF"); | ||||
| 			break; | ||||
| 		} | ||||
| 		case sand: | ||||
| 		{ | ||||
| 			return std::string("SANDTL.DEF"); | ||||
| 			break; | ||||
| 		} | ||||
| 		case grass: | ||||
| 		{ | ||||
| 			return std::string("GRASTL.DEF"); | ||||
| 			break; | ||||
| 		} | ||||
| 		case snow: | ||||
| 		{ | ||||
| 			return std::string("SNOWTL.DEF"); | ||||
| 			break; | ||||
| 		} | ||||
| 		case swamp: | ||||
| 		{ | ||||
| 			return std::string("SWMPTL.DEF");			 | ||||
| 			break; | ||||
| 		} | ||||
| 		case rough: | ||||
| 		{ | ||||
| 			return std::string("ROUGTL.DEF");		 | ||||
| 			break; | ||||
| 		} | ||||
| 		case subterranean: | ||||
| 		{ | ||||
| 			return std::string("SUBBTL.DEF");		 | ||||
| 			break; | ||||
| 		} | ||||
| 		case lava: | ||||
| 		{ | ||||
| 			return std::string("LAVATL.DEF");		 | ||||
| 			break; | ||||
| 		} | ||||
| 		case water: | ||||
| 		{ | ||||
| 			return std::string("WATRTL.DEF"); | ||||
| 			break; | ||||
| 		} | ||||
| 		case rock: | ||||
| 		{ | ||||
| 			return std::string("ROCKTL.DEF");		 | ||||
| 			break; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| void CSemiDefHandler::openDef(const char *name) | ||||
| { | ||||
| 	std::ifstream * is = new std::ifstream(); | ||||
| 	is -> open(name,std::ios::binary); | ||||
| 	is->seekg(0,std::ios::end); // na koniec | ||||
| 	int andame = is->tellg();  // read length | ||||
| 	is->seekg(0,std::ios::beg); // wracamy na poczatek | ||||
| 	buforD = new unsigned char[andame]; // allocate memory  | ||||
| 	is->read((char*)buforD, andame); // read map file to buffer | ||||
| 	defName = name; | ||||
| 	int gdzie = defName.find_last_of("\\"); | ||||
| 	defName = defName.substr(gdzie+1, gdzie-defName.length()); | ||||
| 	delete is; | ||||
|  | ||||
| 	readFileList(); | ||||
| 	loadImages(); | ||||
|  | ||||
| } | ||||
| void CSemiDefHandler::readFileList() | ||||
| { | ||||
| 	howManyImgs = buforD[788]; | ||||
| 	int i = 800; | ||||
| 	for (int pom=0;pom<howManyImgs;pom++) | ||||
| 	{ | ||||
| 		std::string temp; | ||||
| 		while (buforD[i]!=0) | ||||
| 		{ | ||||
| 			temp+=buforD[i++]; | ||||
| 		} | ||||
| 		i++;; | ||||
| 		if (temp!="") | ||||
| 		{ | ||||
| 			temp = temp.substr(0,temp.length()-4) + ".BMP"; | ||||
| 			namesOfImgs.push_back(temp); | ||||
| 		} | ||||
| 		else pom--; | ||||
| 	} | ||||
| } | ||||
| void CSemiDefHandler::loadImages() | ||||
| { | ||||
| 	for (int i=0; i<namesOfImgs.size(); i++) | ||||
| 	{ | ||||
| 		openImg(("H3sprite.lod\\_"+defName+"\\"+namesOfImgs[i]).c_str()); | ||||
| 	} | ||||
| } | ||||
|  void SDL_DisplayBitmap(const char *file, SDL_Surface *ekran, int x, int y) | ||||
| { | ||||
| 	 SDL_Surface *image; | ||||
| 	 SDL_Rect dest; | ||||
| 	  | ||||
| 	 image = SDL_LoadBMP(file); | ||||
| 	 if ( image == NULL ) | ||||
| 	 { | ||||
| 		  fprintf(stderr, "Nie mo�na wczyta� %s: %s\n", file, SDL_GetError()); | ||||
| 		  return; | ||||
| 	 } | ||||
| 	 dest.x = x; | ||||
| 	 dest.y = y; | ||||
| 	 dest.w = image->w; | ||||
| 	 dest.h = image->h; | ||||
| 	 SDL_BlitSurface(image, NULL, ekran, &dest); | ||||
| 	 SDL_UpdateRects(ekran, 1, &dest); | ||||
| 	SDL_FreeSurface(image); | ||||
| } | ||||
| void CSemiDefHandler::openImg(const char *name) | ||||
| { | ||||
| 	SDL_Surface *image; | ||||
| 	image=IMG_Load(name);  | ||||
| 	//SDL_DisplayBitmap(name,image, 0,0); | ||||
| 	if(!image)  | ||||
| 	{ | ||||
| 		printf("IMG_Load: %s\n", IMG_GetError()); | ||||
| 		// handle error | ||||
| 	} | ||||
| 	Cimage vinya; | ||||
| 	vinya.bitmap=image; | ||||
| 	vinya.imName = name; | ||||
| 	ourImages.push_back(vinya); | ||||
| } | ||||
							
								
								
									
										28
									
								
								CSemiDefHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								CSemiDefHandler.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| #ifndef SEMIDEF_H | ||||
| #define SEMIDEF_H | ||||
| #include "global.h" | ||||
| #include <string> | ||||
| #include "SDL.h" | ||||
| #include "SDL_image.h" | ||||
| #include <vector> | ||||
| struct Cimage | ||||
| { | ||||
| 	std::string imName; //name without extension | ||||
| 	SDL_Surface * bitmap; | ||||
| }; | ||||
| class CSemiDefHandler | ||||
| { | ||||
| public: | ||||
| 	int howManyImgs;	 | ||||
| 	std::string defName; | ||||
| 	std::vector<Cimage> ourImages; | ||||
| 	std::vector<std::string> namesOfImgs; | ||||
| 	unsigned char * buforD; | ||||
|  | ||||
| 	static std::string nameFromType(EterrainType typ); | ||||
| 	void openImg(const char *name); | ||||
| 	void openDef(const char *name); | ||||
| 	void readFileList(); | ||||
| 	void loadImages(); | ||||
| }; | ||||
| #endif // SEMIDEF_H | ||||
							
								
								
									
										1231
									
								
								SDL_rotozoom.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1231
									
								
								SDL_rotozoom.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										117
									
								
								SDL_rotozoom.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								SDL_rotozoom.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
|  | ||||
| /* | ||||
|  | ||||
|  SDL_rotozoom - rotozoomer | ||||
|  | ||||
|  LGPL (c) A. Schiffler | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_rotozoom_h | ||||
| #define _SDL_rotozoom_h | ||||
|  | ||||
| #include <math.h> | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #ifndef M_PI | ||||
| #define M_PI	3.141592654 | ||||
| #endif | ||||
|  | ||||
| #include "SDL.h" | ||||
|  | ||||
| /* ---- Defines */ | ||||
|  | ||||
| #define SMOOTHING_OFF		0 | ||||
| #define SMOOTHING_ON		1 | ||||
|  | ||||
| /* ---- Structures */ | ||||
|  | ||||
|     typedef struct tColorRGBA { | ||||
| 	Uint8 r; | ||||
| 	Uint8 g; | ||||
| 	Uint8 b; | ||||
| 	Uint8 a; | ||||
|     } tColorRGBA; | ||||
|  | ||||
|     typedef struct tColorY { | ||||
| 	Uint8 y; | ||||
|     } tColorY; | ||||
|  | ||||
|  | ||||
| /* ---- Prototypes */ | ||||
|  | ||||
| #ifdef WIN32 | ||||
| #ifdef BUILD_DLL | ||||
| #define DLLINTERFACE __declspec(dllexport) | ||||
| #else | ||||
| #define DLLINTERFACE __declspec(dllimport) | ||||
| #endif | ||||
| #else | ||||
| #define DLLINTERFACE | ||||
| #endif | ||||
|  | ||||
| /*  | ||||
|   | ||||
|  rotozoomSurface() | ||||
|  | ||||
|  Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. | ||||
|  'angle' is the rotation in degrees. 'zoom' a scaling factor. If 'smooth' is 1 | ||||
|  then the destination 32bit surface is anti-aliased. If the surface is not 8bit | ||||
|  or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. | ||||
|  | ||||
| */ | ||||
|  | ||||
|     SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth); | ||||
|  | ||||
|     DLLINTERFACE SDL_Surface *rotozoomSurfaceXY | ||||
|     (SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth); | ||||
|  | ||||
| /* Returns the size of the target surface for a rotozoomSurface() call */ | ||||
|  | ||||
|     DLLINTERFACE void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, | ||||
| 					  int *dstheight); | ||||
|  | ||||
|     DLLINTERFACE void rotozoomSurfaceSizeXY | ||||
|     (int width, int height, double angle, double zoomx, double zoomy,  | ||||
|      int *dstwidth, int *dstheight); | ||||
|  | ||||
| /*  | ||||
|   | ||||
|  zoomSurface() | ||||
|  | ||||
|  Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. | ||||
|  'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is 1 | ||||
|  then the destination 32bit surface is anti-aliased. If the surface is not 8bit | ||||
|  or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. | ||||
|  | ||||
| */ | ||||
|  | ||||
|     DLLINTERFACE SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth); | ||||
|  | ||||
| /* Returns the size of the target surface for a zoomSurface() call */ | ||||
|  | ||||
|     DLLINTERFACE void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight); | ||||
|  | ||||
|  | ||||
| /*  | ||||
|     shrinkSurface() | ||||
|  | ||||
|     Shrinks a 32bit or 8bit 'src' surface ti a newly created 'dst' surface. | ||||
|     'factorx' and 'factory' are the shrinking ratios (i.e. 2=1/2 the size, | ||||
|     3=1/3 the size, etc.) The destination surface is antialiased by averaging | ||||
|     the source box RGBA or Y information. If the surface is not 8bit | ||||
|     or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. | ||||
| */      | ||||
|      | ||||
|     DLLINTERFACE SDL_Surface *shrinkSurface(SDL_Surface * src, int factorx, int factory); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif				/* _SDL_rotozoom_h */ | ||||
							
								
								
									
										12
									
								
								global.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								global.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| #ifndef GLOBAL_H | ||||
| #define GLOBAL_H | ||||
| enum EterrainType {dirt, sand, grass, snow, swamp, rough, subterranean, lava, water, rock}; | ||||
| enum Eriver {clearRiver=1, icyRiver, muddyRiver, lavaRiver}; | ||||
| enum Eroad {dirtRoad=1, gravelRoad, cobblestoneRoad}; | ||||
| enum Eformat { WoG=0x33, AB=0x15, RoE=0x0e,  SoD=0x1c}; | ||||
| enum EvictoryConditions {artifact, gatherTroop, gatherResource, buildCity, buildGrail, beatHero,  | ||||
| captureCity, beatMonster, takeDwellings, takeMines, transportItem, winStandard=255}; | ||||
| enum ElossCon {lossCastle, lossHero, timeExpires, lossStandard=255}; | ||||
|  | ||||
| #define DEFBYPASS | ||||
| #endif //GLOBAL_H | ||||
							
								
								
									
										47
									
								
								inde.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								inde.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| /* zpipe.c: example of proper use of zlib's inflate() and deflate() | ||||
|    Not copyrighted -- provided to the public domain | ||||
|    Version 1.4  11 December 2005  Mark Adler */ | ||||
|  | ||||
| /* Version history: | ||||
|    1.0  30 Oct 2004  First version | ||||
|    1.1   8 Nov 2004  Add void casting for unused return values | ||||
| 					 Use switch statement for inflate() return values | ||||
|    1.2   9 Nov 2004  Add assertions to document zlib guarantees | ||||
|    1.3   6 Apr 2005  Remove incorrect assertion in inf() | ||||
|    1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions | ||||
| 					 Avoid some compiler warnings for input and output buffers | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include "stdafx.h" | ||||
| /* compress or decompress from stdin to stdout */ | ||||
| //int main(int argc, char **argv) | ||||
| //{ | ||||
| //	int ret; | ||||
| // | ||||
| //	/* avoid end-of-line conversions */ | ||||
| //	SET_BINARY_MODE(stdin); | ||||
| //	SET_BINARY_MODE(stdout); | ||||
| // | ||||
| //	/* do compression if no arguments */ | ||||
| //	if (argc == 1) { | ||||
| //		ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); | ||||
| //		if (ret != Z_OK) | ||||
| //			zerr(ret); | ||||
| //		return ret; | ||||
| //	} | ||||
| // | ||||
| //	/* do decompression if -d specified */ | ||||
| //	else if (argc == 2 && strcmp(argv[1], "-d") == 0) { | ||||
| //		ret = inf(stdin, stdout); | ||||
| //		if (ret != Z_OK) | ||||
| //			zerr(ret); | ||||
| //		return ret; | ||||
| //	} | ||||
| // | ||||
| //	/* otherwise, report usage */ | ||||
| //	else { | ||||
| //		fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr); | ||||
| //		return 1; | ||||
| //	} | ||||
| //} | ||||
							
								
								
									
										147
									
								
								map.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								map.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,147 @@ | ||||
| #ifndef MAPD | ||||
| #define MAPD | ||||
| struct TimeEvent | ||||
| { | ||||
| //bajty wydarze� (59 + |teksty|) | ||||
| //4 bajty na d�ugo�� nazwy zdarzenia | ||||
| //nazwa zdarzenia (bajty dodatkowe) | ||||
| //4 bajty na d�ugo�� wiadomo�ci | ||||
| //wiadomo�� (bajty dodatkowe) | ||||
| //4 bajty na zwi�kszenie si� ilosci drewna (zapis normalny) lub ff,ff,ff,ff - ilo�� drewna do odebrania (maksymalna ilo�� drewna, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci rt�ci (zapis normalny) lub ff,ff,ff,ff - ilo�� rt�ci do odebrania (maksymalna ilo�� rt�ci, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci rudy (zapis normalny) lub ff,ff,ff,ff - ilo�� rudy do odebrania (maksymalna ilo�� rudy, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci siarki (zapis normalny) lub ff,ff,ff,ff - ilo�� siarki do odebrania (maksymalna ilo�� siarki, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci kryszta�u (zapis normalny) lub ff,ff,ff,ff - ilo�� kryszta�u do odebrania (maksymalna ilo�� kryszta�u, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci klejnot�w (zapis normalny) lub ff,ff,ff,ff - ilo�� klejnot�w do odebrania (maksymalna ilo�� klejnot�w, kt�r� mo�na da�/odebra� to 32767) | ||||
| //4 bajty na zwi�kszenie si� ilosci z�ota (zapis normalny) lub ff,ff,ff,ff - ilo�� z�ota do odebrania (maksymalna ilo�� z�ota, kt�r� mo�na da�/odebra� to 32767) | ||||
| //1 bajt - kt�rych graczy dotyczy zdarzenie (pole bitowe, +1 - pierwszy, +2 - drugi, +4 - trzeci, +8 - czwarty, +16 - pi�ty, +32 - sz�sty, +64 - si�dmy, +128 - �smy) | ||||
| //1 bajt - czy zdarzenie odnosi si� do graczy - ludzi (00 - nie, 01 - tak) | ||||
| //1 bajt - czy zdarzenie odnosi si� do graczy komputerowych (00 - nie, 01 - tak) | ||||
| //2 bajty - op��nienie pierwszego wyst�pienia (w dniach, zapis normalny, maks 671) | ||||
| //1 bajt - co ile dni wyst�puje zdarzenie (maks 28, 00 oznacza zdarzenie jednorazowe) | ||||
| //17 bajt�w zerowych | ||||
| }; | ||||
| struct TerrainTile | ||||
| { | ||||
| 	EterrainType tertype; // type of terrain | ||||
| 	unsigned int terview; // look of terrain | ||||
| 	Eriver nuine; // type of Eriver (0 if there is no Eriver) | ||||
| 	unsigned int rivDir; // direction of Eriver | ||||
| 	Eroad malle; // type of Eroad (0 if there is no Eriver) | ||||
| 	unsigned int roadDir; // direction of Eroad | ||||
| 	unsigned int siodmyTajemniczyBajt; // mysterius byte // jak bedzie waidomo co to, to sie nazwie inaczej | ||||
| }; | ||||
| struct DefInfo //information from def declaration | ||||
| { | ||||
| 	std::string name;  | ||||
| 	int bytes [46]; | ||||
| }; | ||||
| struct SheroName //name of starting hero | ||||
| { | ||||
| 	int heroID; | ||||
| 	std::string heroName; | ||||
| }; | ||||
| struct PlayerInfo | ||||
| { | ||||
| 	bool canHumanPlay; | ||||
| 	bool canComputerPlay; | ||||
| 	unsigned int AITactic; //(00 - random, 01 -  warrior, 02 - builder, 03 - explorer) | ||||
| 	unsigned int allowedFactions; //(01 - castle; 02 - rampart; 04 - tower; 08 - inferno; 16 - necropolis; 32 - dungeon; 64 - stronghold; 128 - fortress; 256 - conflux); | ||||
| 	bool isFactionRandom;  | ||||
| 	unsigned int mainHeroPortrait; //it's ID of hero with choosen portrait; 255 if standard | ||||
| 	std::string mainHeroName; | ||||
| 	std::vector<SheroName> heroesNames; | ||||
| }; | ||||
| struct Location | ||||
| { | ||||
| 	int x, y;  | ||||
| 	bool z; // underground | ||||
| }; | ||||
| struct LossCondition | ||||
| { | ||||
| 	ElossCon typeOfLossCon; | ||||
| 	union | ||||
| 	{ | ||||
| 		Location castlePos; | ||||
| 		Location heroPos; | ||||
| 		int timeLimit; // in days | ||||
| 	}; | ||||
| }; | ||||
| struct CspecificVictoryConidtions | ||||
| { | ||||
| 	bool allowNormalVictory; | ||||
| 	bool appliesToAI; | ||||
| }; | ||||
| struct VicCon0 : public CspecificVictoryConidtions //acquire artifact | ||||
| { | ||||
| 	int ArtifactID; | ||||
| }; | ||||
| struct VicCon1 : public CspecificVictoryConidtions //accumulate creatures | ||||
| { | ||||
| 	int monsterID; | ||||
| 	int neededQuantity; | ||||
| }; | ||||
| struct VicCon2 : public CspecificVictoryConidtions // accumulate resources | ||||
| { | ||||
| 	int resourceID; | ||||
| 	int neededQuantity; | ||||
| }; | ||||
| struct VicCon3 : public CspecificVictoryConidtions // upgrade specific town | ||||
| { | ||||
| 	Location posOfCity; | ||||
| 	int councilNeededLevel; //0 - town; 1 - city; 2 - capitol | ||||
| 	int fortNeededLevel;// 0 - fort; 1 - citadel; 2 - castle | ||||
| }; | ||||
| struct VicCon4 : public CspecificVictoryConidtions // build grail structure | ||||
| { | ||||
| 	bool anyLocation; | ||||
| 	Location whereBuildGrail; | ||||
| }; | ||||
| struct VicCon5 : public CspecificVictoryConidtions // defeat a specific hero | ||||
| { | ||||
| 	Location locationOfHero; | ||||
| }; | ||||
| struct VicCon6 : public CspecificVictoryConidtions // capture a specific town | ||||
| { | ||||
| 	Location locationOfTown; | ||||
| }; | ||||
| struct VicCon7 : public CspecificVictoryConidtions // defeat a specific monster | ||||
| { | ||||
| 	Location locationOfMonster; | ||||
| }; | ||||
| /*struct VicCon8 : public CspecificVictoryConidtions // flag all creature dwellings | ||||
| { | ||||
| }; | ||||
| struct VicCon9 : public CspecificVictoryConidtions // flag all mines | ||||
| { | ||||
| };*/ | ||||
| struct VicCona : public CspecificVictoryConidtions //transport specific artifact | ||||
| { | ||||
| 	int artifactID; | ||||
| 	Location destinationPlace; | ||||
| }; | ||||
| struct Rumor | ||||
| { | ||||
| 	std::string name, text; | ||||
| }; | ||||
| struct Mapa | ||||
| { | ||||
| 	Eformat version; // version of map Eformat | ||||
| 	bool twoLevel; // if map has underground level | ||||
| 	int difficulty; // 0 easy - 4 impossible | ||||
| 	int levelLimit; | ||||
| 	bool areAnyPLayers; // if there are any playable players on map | ||||
| 	std::string name;  //name of map | ||||
| 	std::string description;  //and description | ||||
| 	int height, width;  | ||||
| 	TerrainTile** terrain;  | ||||
| 	TerrainTile** undergroungTerrain; // used only if there is underground level | ||||
| 	std::vector<Rumor> rumors; | ||||
| 	std::vector<DefInfo> defy; // list of .def files | ||||
| 	PlayerInfo players[8]; // info about players | ||||
| 	std::vector<int> teams;  // teams[i] = team of player nr i  | ||||
| 	LossCondition lossCondition; | ||||
| 	EvictoryConditions victoryCondition; //victory conditions | ||||
| 	CspecificVictoryConidtions * vicConDetails; // used only if vistory conditions aren't standard | ||||
| }; | ||||
| #endif //MAPD | ||||
							
								
								
									
										65
									
								
								mapHandler.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								mapHandler.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| #include "stdafx.h" | ||||
| #include "mapHandler.h" | ||||
| #include "CSemiDefHandler.h" | ||||
| #include "SDL_rotozoom.h" | ||||
| extern SDL_Surface * ekran; | ||||
| void mapHandler::init() | ||||
| { | ||||
| 	terrainBitmap = new SDL_Surface **[reader->map.width]; | ||||
| 	for (int ii=0;ii<reader->map.width;ii++) | ||||
| 		terrainBitmap[ii] = new SDL_Surface*[reader->map.height]; // allocate memory  | ||||
| 	for (int i=0; i<reader->map.width; i++) | ||||
| 	{ | ||||
| 		for (int j=0; j<reader->map.height;j++) | ||||
| 		{ | ||||
| 			TerrainTile zz = reader->map.terrain[i][j]; | ||||
| 			std::string name = CSemiDefHandler::nameFromType(reader->map.terrain[i][j].tertype); | ||||
| 			for (int k=0; k<reader->defs.size(); k++) | ||||
| 			{ | ||||
| 				if (reader->defs[k]->defName != name) | ||||
| 					continue; | ||||
| 				else | ||||
| 				{ | ||||
| 					SDL_Surface * n; | ||||
| 					int ktora = reader->map.terrain[i][j].terview; | ||||
| 					terrainBitmap[i][j] = reader->defs[k]->ourImages[ktora].bitmap; | ||||
| 					//TODO: odwracanie	 | ||||
| 					 | ||||
| 					//SDL_BlitSurface(terrainBitmap[i][j],NULL,ekran,NULL); SDL_Flip(ekran);SDL_Delay(50); | ||||
|  | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| SDL_Surface * mapHandler::terrainRect(int x, int y, int dx, int dy) | ||||
| { | ||||
| #if SDL_BYTEORDER == SDL_BIG_ENDIAN | ||||
|     int rmask = 0xff000000; | ||||
|     int gmask = 0x00ff0000; | ||||
|     int bmask = 0x0000ff00; | ||||
|     int amask = 0x000000ff; | ||||
| #else | ||||
|     int rmask = 0x000000ff; | ||||
|     int gmask = 0x0000ff00; | ||||
|     int bmask = 0x00ff0000; | ||||
|     int amask = 0xff000000; | ||||
| #endif | ||||
| 	SDL_Surface * su = SDL_CreateRGBSurface(SDL_SWSURFACE, dx*32, dy*32, 32, | ||||
|                                    rmask, gmask, bmask, amask); | ||||
| 	for (int bx=0; bx<dx; bx++) | ||||
| 	{ | ||||
| 		for (int by=0; by<dy; by++) | ||||
| 		{ | ||||
| 			SDL_Rect * sr = new SDL_Rect; | ||||
| 			sr->y=by*32; | ||||
| 			sr->x=bx*32; | ||||
| 			sr->h=sr->w=32; | ||||
| 			SDL_BlitSurface(terrainBitmap[bx][by],NULL,su,sr); | ||||
|  | ||||
| 			//SDL_BlitSurface(su,NULL,ekran,NULL);SDL_Flip(ekran); | ||||
| 		} | ||||
| 	} | ||||
| 	return su; | ||||
| } | ||||
							
								
								
									
										11
									
								
								mapHandler.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								mapHandler.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| #include "CAmbarCendamo.h" | ||||
| class mapHandler | ||||
| { | ||||
| public: | ||||
| 	CAmbarCendamo * reader; | ||||
| 	SDL_Surface *** terrainBitmap; | ||||
| 	SDL_Surface *** undTerrainBitmap; // used only if there is underground level | ||||
| 	SDL_Surface * terrainRect(int x, int y, int dx, int dy); | ||||
| 	SDL_Surface mirrorImage(SDL_Surface *src); | ||||
| 	void init(); | ||||
| }; | ||||
							
								
								
									
										8
									
								
								stdafx.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								stdafx.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| // stdafx.cpp : source file that includes just the standard includes | ||||
| // CMT.pch will be the pre-compiled header | ||||
| // stdafx.obj will contain the pre-compiled type information | ||||
|  | ||||
| #include "stdafx.h" | ||||
|  | ||||
| // TODO: reference any additional headers you need in STDAFX.H | ||||
| // and not in this file | ||||
							
								
								
									
										16
									
								
								stdafx.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								stdafx.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| // stdafx.h : include file for standard system include files, | ||||
| // or project specific include files that are used frequently, but | ||||
| // are changed infrequently | ||||
| // | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
|  | ||||
| #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers | ||||
| #include <stdio.h> | ||||
| #include <tchar.h> | ||||
| #include <string> | ||||
| #include <vector> | ||||
|  | ||||
|  | ||||
| // TODO: reference additional headers your program requires here | ||||
		Reference in New Issue
	
	Block a user