mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	* added #38
* CDefEssential is now useful * initGameState shouldn't overwrite starting armies * loading more graphics (small creature icons, large hero portraits) * functions for getting current valueof morale/luck (unfinished) * added in CLodHandler function that returns CDefEssential with images from desired .def * copySurface works correctly (I hope)
This commit is contained in:
		| @@ -189,6 +189,8 @@ void CHeroList::select(int which) | ||||
| 	LOCPLINT->adventureInt->terrain.currentPath = items[which].second; | ||||
| 	draw(); | ||||
| 	LOCPLINT->adventureInt->townList.draw(); | ||||
| 	 | ||||
| 	LOCPLINT->adventureInt->infoBar.draw(NULL); | ||||
| } | ||||
| void CHeroList::clickLeft(tribool down) | ||||
| { | ||||
| @@ -1057,7 +1059,7 @@ void CResDataBar::draw() | ||||
| } | ||||
| CInfoBar::CInfoBar() | ||||
| { | ||||
| 	pos.x=604; | ||||
| 	pos.x=605; | ||||
| 	pos.y=389; | ||||
| 	pos.w=194; | ||||
| 	pos.h=186; | ||||
|   | ||||
| @@ -184,6 +184,7 @@ public: | ||||
| class CInfoBar | ||||
| 	:public virtual CIntObject | ||||
| { | ||||
| public: | ||||
| 	CInfoBar(); | ||||
| 	void draw(void * specific=NULL); // if specific==0 function draws info about selected hero/town | ||||
| }; | ||||
| @@ -230,7 +231,7 @@ public: | ||||
| 	 | ||||
| 	CHeroList heroList; | ||||
| 	CTownList townList;	 | ||||
| 	 | ||||
| 	CInfoBar infoBar; | ||||
| 	 | ||||
| 	struct CurrentSelection | ||||
| 	{ | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
| #include "CPathfinder.h" | ||||
| #include "mapHandler.h" | ||||
| #include <sstream> | ||||
|  | ||||
| #include "SDL_Extensions.h" | ||||
| int internalFunc(void * callback) | ||||
| { | ||||
| 	CCallback * cb = (CCallback*)callback; | ||||
| @@ -56,6 +56,12 @@ int internalFunc(void * callback) | ||||
| 			readed>>src; | ||||
| 			CGI->mh->getObjDescriptions(src); | ||||
| 			break; | ||||
| 		case 'I':  | ||||
| 			{ | ||||
| 				SDL_Surface * temp = LOCPLINT->infoWin(NULL); | ||||
| 				blitAtWR(temp,605,389); | ||||
| 				break; | ||||
| 			} | ||||
| 		case 'T': //test rect | ||||
| 			readed>>src; | ||||
| 			for(int g=0; g<8; ++g) | ||||
|   | ||||
| @@ -118,6 +118,24 @@ CPlayerInterface::CPlayerInterface(int Player, int serial) | ||||
| 	CGI->localPlayer = playerID; | ||||
| 	human=true; | ||||
| 	hInfo = CGI->bitmaph->loadBitmap("HEROQVBK.bmp"); | ||||
| 	SDL_SetColorKey(hInfo,SDL_SRCCOLORKEY,SDL_MapRGB(hInfo->format,0,255,255)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(44,82)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(80,82)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(116,82)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(26,131)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(62,131)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(98,131)); | ||||
| 	slotsPos.push_back(std::pair<int,int>(134,131)); | ||||
|  | ||||
| 	luck22 = CGI->spriteh->giveDefEss("ILCK22.DEF"); | ||||
| 	luck30 = CGI->spriteh->giveDefEss("ILCK30.DEF"); | ||||
| 	luck42 = CGI->spriteh->giveDefEss("ILCK42.DEF"); | ||||
| 	luck82 = CGI->spriteh->giveDefEss("ILCK82.DEF"); | ||||
| 	morale22 = CGI->spriteh->giveDefEss("IMRL22.DEF"); | ||||
| 	morale30 = CGI->spriteh->giveDefEss("IMRL30.DEF"); | ||||
| 	morale42 = CGI->spriteh->giveDefEss("IMRL42.DEF"); | ||||
| 	morale82 = CGI->spriteh->giveDefEss("IMRL82.DEF"); | ||||
|  | ||||
| } | ||||
| void CPlayerInterface::init(CCallback * CB) | ||||
| { | ||||
| @@ -788,17 +806,27 @@ SDL_Surface * CPlayerInterface::infoWin(void * specific) //specific=0 => draws i | ||||
| 			char * buf = new char[10]; | ||||
| 			SDL_Surface * ret = copySurface(hInfo); | ||||
| 			SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format,0,255,255)); | ||||
| 			blueToPlayersAdv(ret,playerID); | ||||
| 			//blueToPlayersAdv(ret,playerID); // zygzyg - nie koloruje, tylko odrobine smieci | ||||
| 			const CHeroInstance * curh = (const CHeroInstance *)adventureInt->selection.selected; | ||||
| 			printAt(curh->name,15,75,GEOR13,zwykly,ret); | ||||
| 			printAt(curh->name,75,15,GEOR13,zwykly,ret); | ||||
| 			for (int i=0;i<PRIMARY_SKILLS;i++) | ||||
| 			{ | ||||
| 				itoa(curh->primSkills[i],buf,10); | ||||
| 				printAtMiddle(buf,87+27*i,69,GEOR13,zwykly,ret); | ||||
| 				printAtMiddle(buf,84+28*i,68,GEOR13,zwykly,ret); | ||||
| 			} | ||||
| 			for (std::map<int,std::pair<CCreature*,int> >::const_iterator i=curh->army.slots.begin(); i!=curh->army.slots.end();i++) | ||||
| 			{ | ||||
| 				blitAt(CGI->creh->smallImgs[(*i).second.first->idNumber],slotsPos[(*i).first].first+1,slotsPos[(*i).first].second+1,ret); | ||||
| 				itoa((*i).second.second,buf,10); | ||||
| 				printAtMiddle(buf,slotsPos[(*i).first].first+17,slotsPos[(*i).first].second+39,GEORM,zwykly,ret); | ||||
| 			} | ||||
| 			blitAt(curh->type->portraitLarge,11,12,ret); | ||||
| 			itoa(curh->mana,buf,10); | ||||
| 			printAtMiddle(buf,169,109,GEORM,zwykly,ret); | ||||
| 			printAtMiddle(buf,166,109,GEORM,zwykly,ret); //mana points | ||||
| 			delete buf; | ||||
| 			blitAt(morale22->ourImages[curh->getCurrentMorale()+3].bitmap,14,84,ret); | ||||
| 			blitAt(luck22->ourImages[curh->getCurrentLuck()+3].bitmap,14,101,ret); | ||||
| 			//SDL_SaveBMP(ret,"inf1.bmp"); | ||||
| 			return ret; | ||||
| 		} | ||||
| 		else if (adventureInt->selection.type == TOWNI_TYPE) | ||||
|   | ||||
| @@ -14,7 +14,7 @@ class CCallback; | ||||
| class CHeroInstance; | ||||
| class CDefHandler; | ||||
| struct HeroMoveDetails; | ||||
|  | ||||
| class CDefEssential; | ||||
| class CIntObject //interface object | ||||
| { | ||||
| public: | ||||
| @@ -122,6 +122,9 @@ public: | ||||
| 	std::vector<CSimpleWindow*> objsToBlit; | ||||
|  | ||||
| 	SDL_Surface * hInfo; | ||||
| 	std::vector<std::pair<int, int> > slotsPos; | ||||
| 	CDefEssential *luck22, *luck30, *luck42, *luck82, | ||||
| 		*morale22, *morale30, *morale42, *morale82; | ||||
|  | ||||
| 	//overloaded funcs from Interface | ||||
| 	void yourTurn(); | ||||
|   | ||||
							
								
								
									
										22
									
								
								CMT.cpp
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								CMT.cpp
									
									
									
									
									
								
							| @@ -127,18 +127,16 @@ void initGameState(CGameInfo * cgi) | ||||
| 		if (vhi->portrait < 0) | ||||
| 			vhi->portrait = vhi->type->ID; | ||||
|  | ||||
|  | ||||
| 		CCreature * ct1 = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType2stack])]); | ||||
| 		int cid1 = (cgi->creh->nameToID[vhi->type->refType2stack]); | ||||
| 	 | ||||
| 		int cid2 = (cgi->creh->nameToID[vhi->type->refType3stack]); | ||||
|  | ||||
| 		vhi->army.slots[0].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType1stack])]); | ||||
| 		vhi->army.slots[0].second = (rand()%(vhi->type->high1stack-vhi->type->low1stack))+vhi->type->low1stack; | ||||
| 		vhi->army.slots[1].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType2stack])]); | ||||
| 		vhi->army.slots[1].second = (rand()%(vhi->type->high2stack-vhi->type->low2stack))+vhi->type->low2stack; | ||||
| 		vhi->army.slots[2].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType3stack])]); | ||||
| 		vhi->army.slots[2].second = (rand()%(vhi->type->high3stack-vhi->type->low3stack))+vhi->type->low3stack; | ||||
| 		//initial army | ||||
| 		if (!vhi->army.slots.size()) | ||||
| 		{ | ||||
| 			vhi->army.slots[0].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType1stack])]); | ||||
| 			vhi->army.slots[0].second = (rand()%(vhi->type->high1stack-vhi->type->low1stack))+vhi->type->low1stack; | ||||
| 			vhi->army.slots[1].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType2stack])]); | ||||
| 			vhi->army.slots[1].second = (rand()%(vhi->type->high2stack-vhi->type->low2stack))+vhi->type->low2stack; | ||||
| 			vhi->army.slots[2].first = &(cgi->creh->creatures[(cgi->creh->nameToID[vhi->type->refType3stack])]); | ||||
| 			vhi->army.slots[2].second = (rand()%(vhi->type->high3stack-vhi->type->low3stack))+vhi->type->low3stack; | ||||
| 		} | ||||
|  | ||||
| 		cgi->state->players[vhi->owner].heroes.push_back(vhi); | ||||
|  | ||||
|   | ||||
| @@ -16,9 +16,7 @@ SDL_Surface * CSDL_Ext::newSurface(int w, int h, SDL_Surface * mod) //creates ne | ||||
|  | ||||
| SDL_Surface * CSDL_Ext::copySurface(SDL_Surface * mod) //returns copy of given surface | ||||
| { | ||||
| 	SDL_Surface * ret = newSurface(mod->w,mod->h,mod); | ||||
| 	SDL_BlitSurface(mod,NULL,ret,NULL); | ||||
| 	return ret; | ||||
| 	return SDL_DisplayFormat(mod); | ||||
| } | ||||
| bool isItIn(const SDL_Rect * rect, int x, int y) | ||||
| { | ||||
|   | ||||
| @@ -274,7 +274,8 @@ void CCreatureHandler::loadCreatures() | ||||
| 		creatures.push_back(ncre); | ||||
| 	} | ||||
|  | ||||
| 	std::ifstream ifs("config/crerefnam.txt"); | ||||
| 	//loading reference names | ||||
| 	std::ifstream ifs("config/crerefnam.txt");  | ||||
| 	int tempi; | ||||
| 	std::string temps; | ||||
| 	for (;;) | ||||
| @@ -286,6 +287,16 @@ void CCreatureHandler::loadCreatures() | ||||
| 		creatures[tempi].nameRef=temps; | ||||
| 	} | ||||
| 	ifs.close(); | ||||
|  | ||||
| 	//loading 32x32px imgs | ||||
| 	CDefHandler *smi = CGI->spriteh->giveDef("CPRSMALL.DEF"); | ||||
| 	smi->notFreeImgs = true; | ||||
| 	for (int i=0; i<smi->ourImages.size(); i++) | ||||
| 	{ | ||||
| 		boost::assign::insert(smallImgs)(i-2,smi->ourImages[i].bitmap); | ||||
| 	} | ||||
| 	delete smi; | ||||
|  | ||||
| } | ||||
|  | ||||
| void CCreatureHandler::loadAnimationInfo() | ||||
|   | ||||
| @@ -44,6 +44,7 @@ public: | ||||
| class CCreatureHandler | ||||
| { | ||||
| public: | ||||
| 	std::map<int,SDL_Surface*> smallImgs; //creature ID -> small 32x32 img of creature; //ID=-2 is for blank (black) img; -1 for the border | ||||
| 	std::vector<CCreature> creatures; | ||||
| 	std::map<std::string,int> nameToID; | ||||
| 	void loadCreatures(); | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -30,7 +30,13 @@ void CHeroHandler::loadPortraits() | ||||
| 		of>>path; | ||||
| 		heroes[ID]->portraitSmall=CGI->bitmaph->loadBitmap(path); | ||||
| 		if (!heroes[ID]->portraitSmall) | ||||
| 			std::cout<<"Can't read portrait for "<<ID<<" ("<<path<<")\n"; | ||||
| 			std::cout<<"Can't read small portrait for "<<ID<<" ("<<path<<")\n"; | ||||
| 		path.replace(2,1,"L"); | ||||
| 		heroes[ID]->portraitLarge=CGI->bitmaph->loadBitmap(path); | ||||
| 		if (!heroes[ID]->portraitLarge) | ||||
| 			std::cout<<"Can't read large portrait for "<<ID<<" ("<<path<<")\n";	 | ||||
| 		SDL_SetColorKey(heroes[ID]->portraitLarge,SDL_SRCCOLORKEY,SDL_MapRGB(heroes[ID]->portraitLarge->format,0,255,255)); | ||||
|  | ||||
| 	} | ||||
| 	of.close(); | ||||
| } | ||||
| @@ -500,6 +506,16 @@ bool CHeroInstance::canWalkOnSea() const | ||||
| 	//TODO: write it - it should check if hero is flying, or something similiar | ||||
| 	return false; | ||||
| } | ||||
| int CHeroInstance::getCurrentLuck() const | ||||
| { | ||||
| 	//TODO: write it | ||||
| 	return 0; | ||||
| } | ||||
| int CHeroInstance::getCurrentMorale() const | ||||
| { | ||||
| 	//TODO: write it | ||||
| 	return 0; | ||||
| } | ||||
| void CHeroHandler::initTerrainCosts() | ||||
| { | ||||
| 	std::ifstream inp; | ||||
|   | ||||
| @@ -27,7 +27,8 @@ public: | ||||
| 	CHeroClass * heroClass; | ||||
| 	EHeroClasses heroType; //hero class | ||||
| 	//bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;} | ||||
| 	SDL_Surface * portraitSmall; //48x32 p | ||||
| 	SDL_Surface * portraitSmall; //48x32 px | ||||
| 	SDL_Surface * portraitLarge; //58x64 px | ||||
| }; | ||||
|  | ||||
| class CHeroClass | ||||
| @@ -74,6 +75,8 @@ public: | ||||
| 	void setPosition(int3 Pos, bool h3m); //as above, but sets position | ||||
|  | ||||
| 	bool canWalkOnSea() const; | ||||
| 	int getCurrentLuck() const; | ||||
| 	int getCurrentMorale() const; | ||||
|  | ||||
| 	//TODO: artifacts, known spells, commander, blessings, curses, morale/luck special modifiers | ||||
| }; | ||||
|   | ||||
| @@ -400,7 +400,7 @@ CDefHandler * CLodHandler::giveDef(std::string defName) | ||||
| 		nh->alphaTransformed = false; | ||||
| 		ret = nh; | ||||
| 	} | ||||
| 	else //we will decompressing file | ||||
| 	else //we will decompress file | ||||
| 	{ | ||||
| 		outp = new unsigned char[ourEntry->size]; | ||||
| 		FLOD.read((char*)outp, ourEntry->size); | ||||
| @@ -415,6 +415,14 @@ CDefHandler * CLodHandler::giveDef(std::string defName) | ||||
| 	delete outp; | ||||
| 	return ret; | ||||
| } | ||||
| CDefEssential * CLodHandler::giveDefEss(std::string defName) | ||||
| { | ||||
| 	CDefEssential * ret; | ||||
| 	CDefHandler * temp = giveDef(defName); | ||||
| 	ret = temp->essentialize(); | ||||
| 	delete temp; | ||||
| 	return ret; | ||||
| } | ||||
| std::vector<CDefHandler *> CLodHandler::extractManyFiles(std::vector<std::string> defNamesIn) | ||||
| { | ||||
| 	std::vector<CDefHandler *> ret(defNamesIn.size()); | ||||
|   | ||||
| @@ -65,6 +65,7 @@ public: | ||||
| 	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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user