mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	* added Necropolis
* townlist in town screen and switching towns * minor changes
This commit is contained in:
		| @@ -3,6 +3,8 @@ | ||||
| #include "hch\CDefHandler.h" | ||||
| #include "CGameInfo.h" | ||||
| #include "hch\CLodHandler.h" | ||||
| #include "hch\CPreGameTextHandler.h" | ||||
| #include "hch/CTownHandler.h" | ||||
| template <typename T> | ||||
| AdventureMapButton<T>::AdventureMapButton () | ||||
| { | ||||
| @@ -121,3 +123,203 @@ void AdventureMapButton<T>::deactivate() | ||||
| 	Hoverable::deactivate(); | ||||
| 	KeyInterested::deactivate(); | ||||
| } | ||||
| template <typename T> | ||||
| CTownList<T>::~CTownList() | ||||
| { | ||||
| 	delete arrup; | ||||
| 	delete arrdo; | ||||
| } | ||||
| template <typename T> | ||||
| CTownList<T>::CTownList(int Size, SDL_Rect * Pos, int arupx, int arupy, int ardox, int ardoy) | ||||
| :CList(Size) | ||||
| { | ||||
| 	pos = *Pos; | ||||
| 	arrup = CGI->spriteh->giveDef("IAM014.DEF"); | ||||
| 	arrdo = CGI->spriteh->giveDef("IAM015.DEF"); | ||||
|  | ||||
| 	arrupp.x=arupx; | ||||
| 	arrupp.y=arupy; | ||||
| 	arrupp.w=arrup->ourImages[0].bitmap->w; | ||||
| 	arrupp.h=arrup->ourImages[0].bitmap->h; | ||||
| 	arrdop.x=ardox; | ||||
| 	arrdop.y=ardoy; | ||||
| 	arrdop.w=arrdo->ourImages[0].bitmap->w; | ||||
| 	arrdop.h=arrdo->ourImages[0].bitmap->h; | ||||
| 	posporx = arrdop.x; | ||||
| 	pospory = arrupp.y + arrupp.h; | ||||
|  | ||||
| 	pressed = indeterminate; | ||||
|  | ||||
| 	from = 0; | ||||
| 	 | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::genList() | ||||
| { | ||||
| 	int howMany = LOCPLINT->cb->howManyTowns(); | ||||
| 	for (int i=0;i<howMany;i++) | ||||
| 	{ | ||||
| 		items.push_back(LOCPLINT->cb->getTownInfo(i,0)); | ||||
| 	} | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::select(int which) | ||||
| { | ||||
| 	selected = which; | ||||
| 	if (which>=items.size())  | ||||
| 		return; | ||||
| 	if(owner) | ||||
| 		(owner->*fun)(); | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::mouseMoved (SDL_MouseMotionEvent & sEvent) | ||||
| { | ||||
| 	if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if (from>0) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advTListUp.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if ((items.size()-from)  >  SIZE) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advTListDown.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	//if not buttons then heroes | ||||
| 	int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 	hx-=pos.x; | ||||
| 	hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 	float ny = (float)hy/(float)32; | ||||
| 	if ((ny>SIZE || ny<0) || (from+ny>=items.size())) | ||||
| 	{ | ||||
| 		LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	}; | ||||
| 	//LOCPLINT->adventureInt->statusbar.print( items[from+ny]->name + ", " + items[from+ny]->town->name ); //TODO - uncomment when pointer to the town type is initialized | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::clickLeft(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[1].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = true; | ||||
| 			return; | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>SIZE)) | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[1].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = false; | ||||
| 			return; | ||||
| 		} | ||||
| 		/***************************TOWNS*****************************************/ | ||||
| 		int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 		hx-=pos.x; | ||||
| 		hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 		float ny = (float)hy/(float)32; | ||||
| 		if (ny>SIZE || ny<0) | ||||
| 			return; | ||||
| 		if (SIZE==5 && ((int)(ny+from))==selected && (LOCPLINT->adventureInt->selection.type == TOWNI_TYPE)) | ||||
| 			LOCPLINT->openTownWindow(items[selected]);//print town screen | ||||
| 		else | ||||
| 			select(ny+from); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (indeterminate(pressed)) | ||||
| 			return; | ||||
| 		if (pressed) //up | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from--; | ||||
| 				if (from<0) | ||||
| 					from=0; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (!pressed) //down | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from++; | ||||
| 				//if (from<items.size()-5) | ||||
| 				//	from=items.size()-5; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 			throw 0; | ||||
|  | ||||
| 	} | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::clickRight(tribool down) | ||||
| {	 | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListUp.second,down,this); | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListDown.second,down,this); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListUp.second,down,this); | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListDown.second,down,this); | ||||
| 	} | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::hover (bool on) | ||||
| { | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::keyPressed (SDL_KeyboardEvent & key) | ||||
| { | ||||
| } | ||||
| template<typename T> | ||||
| void CTownList<T>::draw() | ||||
| {	 | ||||
| 	for (int iT=0+from;iT<SIZE+from;iT++) | ||||
| 	{ | ||||
| 		int i = iT-from; | ||||
| 		if (iT>=items.size()) | ||||
| 		{ | ||||
| 			blitAt(CGI->townh->getPic(-1),posporx,pospory+i*32); | ||||
| 			continue; | ||||
| 		} | ||||
|  | ||||
| 		blitAt(CGI->townh->getPic(items[iT]->subID,items[iT]->hasFort(),items[iT]->builded),posporx,pospory+i*32); | ||||
|  | ||||
| 		if ((selected == iT) && (LOCPLINT->adventureInt->selection.type == TOWNI_TYPE)) | ||||
| 		{ | ||||
| 			blitAt(CGI->townh->getPic(-2),posporx,pospory+i*32); | ||||
| 		} | ||||
| 	} | ||||
| 	if (from>0) | ||||
| 		blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 	else | ||||
| 		blitAt(arrup->ourImages[2].bitmap,arrupp.x,arrupp.y); | ||||
|  | ||||
| 	if (items.size()-from>SIZE) | ||||
| 		blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 	else | ||||
| 		blitAt(arrdo->ourImages[2].bitmap,arrdop.x,arrdop.y); | ||||
| } | ||||
| @@ -19,7 +19,7 @@ | ||||
| #include <sstream> | ||||
| #include "AdventureMapButton.h" | ||||
| #include "CHeroWindow.h" | ||||
|  | ||||
| #pragma warning (disable : 4355)  | ||||
| extern TTF_Font * TNRB16, *TNR, *GEOR13, *GEORXX; //fonts | ||||
|  | ||||
| using namespace boost::logic; | ||||
| @@ -30,435 +30,6 @@ CAdvMapInt::~CAdvMapInt() | ||||
| 	SDL_FreeSurface(bg); | ||||
| 	delete heroWindow; | ||||
| } | ||||
| void CList::activate() | ||||
| { | ||||
| 	ClickableL::activate(); | ||||
| 	ClickableR::activate(); | ||||
| 	Hoverable::activate(); | ||||
| 	KeyInterested::activate(); | ||||
| 	MotionInterested::activate(); | ||||
| };  | ||||
| void CList::deactivate() | ||||
| { | ||||
| 	ClickableL::deactivate(); | ||||
| 	ClickableR::deactivate(); | ||||
| 	Hoverable::deactivate(); | ||||
| 	KeyInterested::deactivate(); | ||||
| 	MotionInterested::deactivate(); | ||||
| };  | ||||
| void CList::clickLeft(tribool down) | ||||
| { | ||||
| }; | ||||
| CHeroList::CHeroList() | ||||
| { | ||||
| 	pos = genRect(192,64,609,196); | ||||
| 	 | ||||
| 	arrupp = genRect(16,64,609,196); | ||||
| 	arrdop = genRect(16,64,609,372); | ||||
|  //32px per hero | ||||
| 	posmobx = 610; | ||||
| 	posmoby = 213; | ||||
| 	posporx = 617; | ||||
| 	pospory = 212; | ||||
| 	posmanx = 666; | ||||
| 	posmany = 213; | ||||
| 	 | ||||
| 	arrup = CGI->spriteh->giveDef("IAM012.DEF"); | ||||
| 	arrdo = CGI->spriteh->giveDef("IAM013.DEF"); | ||||
| 	mobile = CGI->spriteh->giveDef("IMOBIL.DEF"); | ||||
| 	mana = CGI->spriteh->giveDef("IMANA.DEF"); | ||||
| 	empty = CGI->bitmaph->loadBitmap("HPSXXX.bmp"); | ||||
| 	selection = CGI->bitmaph->loadBitmap("HPSYYY.bmp"); | ||||
| 	SDL_SetColorKey(selection,SDL_SRCCOLORKEY,SDL_MapRGB(selection->format,0,255,255)); | ||||
| 	from = 0; | ||||
| 	pressed = indeterminate; | ||||
| } | ||||
|  | ||||
| void CHeroList::init() | ||||
| { | ||||
| 	bg = CSDL_Ext::newSurface(68,193,ekran); | ||||
| 	SDL_BlitSurface(LOCPLINT->adventureInt->bg,&genRect(193,68,607,196),bg,&genRect(193,68,0,0)); | ||||
| } | ||||
| void CHeroList::genList() | ||||
| { | ||||
| 	int howMany = LOCPLINT->cb->howManyHeroes(); | ||||
| 	for (int i=0;i<howMany;i++) | ||||
| 	{ | ||||
| 		items.push_back(std::pair<const CGHeroInstance *,CPath *>(LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,i,0),NULL)); | ||||
| 	} | ||||
| } | ||||
| void CHeroList::select(int which) | ||||
| { | ||||
| 	selected = which; | ||||
| 	if (which>=items.size())  | ||||
| 		return; | ||||
| 	LOCPLINT->adventureInt->centerOn(items[which].first->pos); | ||||
| 	LOCPLINT->adventureInt->selection.type = HEROI_TYPE; | ||||
| 	LOCPLINT->adventureInt->selection.selected = items[which].first; | ||||
| 	LOCPLINT->adventureInt->terrain.currentPath = items[which].second; | ||||
| 	draw(); | ||||
| 	LOCPLINT->adventureInt->townList.draw(); | ||||
| 	 | ||||
| 	LOCPLINT->adventureInt->infoBar.draw(NULL); | ||||
| } | ||||
| void CHeroList::clickLeft(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[1].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = true; | ||||
| 			return; | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[1].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = false; | ||||
| 			return; | ||||
| 		} | ||||
| 		/***************************HEROES*****************************************/ | ||||
| 		int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 		hx-=pos.x; | ||||
| 		hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 		float ny = (float)hy/(float)32; | ||||
| 		if (ny>=5 || ny<0) | ||||
| 			return; | ||||
| 		if (((int)(ny+from))==selected) | ||||
| 			LOCPLINT->openHeroWindow(items[selected].first);//print hero screen | ||||
| 		select(ny+from); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (indeterminate(pressed)) | ||||
| 			return; | ||||
| 		if (pressed) //up | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from--; | ||||
| 				if (from<0) | ||||
| 					from=0; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (!pressed) //down | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from++; | ||||
| 				//if (from<items.size()-5) | ||||
| 				//	from=items.size()-5; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 			throw 0; | ||||
|  | ||||
| 	} | ||||
| } | ||||
| void CHeroList::mouseMoved (SDL_MouseMotionEvent & sEvent) | ||||
| { | ||||
| 	if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if (from>0) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advHListUp.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if ((items.size()-from)  >  5) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advHListDown.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	//if not buttons then heroes | ||||
| 	int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 	hx-=pos.x; | ||||
| 	hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 	float ny = (float)hy/(float)32; | ||||
| 	if ((ny>5 || ny<0) || (from+ny>=items.size())) | ||||
| 	{ | ||||
| 		LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	std::vector<std::string> temp; | ||||
| 	temp+=(items[from+ny].first->name),(items[from+ny].first->type->heroClass->name); | ||||
| 	LOCPLINT->adventureInt->statusbar.print( processStr(CGI->generaltexth->allTexts[15],temp) ); | ||||
| 	//select(ny+from); | ||||
| } | ||||
| void CHeroList::clickRight(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListUp.second,down,this); | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListDown.second,down,this); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListUp.second,down,this); | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListDown.second,down,this); | ||||
| 	} | ||||
| } | ||||
| void CHeroList::hover (bool on) | ||||
| { | ||||
| } | ||||
| void CHeroList::keyPressed (SDL_KeyboardEvent & key) | ||||
| { | ||||
| } | ||||
| void CHeroList::updateHList() | ||||
| { | ||||
| 	items.clear(); | ||||
| 	genList(); | ||||
| } | ||||
| void CHeroList::updateMove(const CGHeroInstance* which) //draws move points bar | ||||
| { | ||||
| 	int ser = LOCPLINT->cb->getHeroSerial(which); | ||||
| 	ser -= from; | ||||
| 	int pom = (which->movement)/100; | ||||
| 	blitAt(mobile->ourImages[pom].bitmap,posmobx,posmoby+ser*32); //move point | ||||
| } | ||||
| void CHeroList::draw() | ||||
| {	 | ||||
| 	for (int iT=0+from;iT<5+from;iT++) | ||||
| 	{ | ||||
| 		int i = iT-from; | ||||
| 		if (iT>=items.size()) | ||||
| 		{ | ||||
| 			blitAt(mobile->ourImages[0].bitmap,posmobx,posmoby+i*32); | ||||
| 			blitAt(mana->ourImages[0].bitmap,posmanx,posmany+i*32); | ||||
| 			blitAt(empty,posporx,pospory+i*32); | ||||
| 			continue; | ||||
| 		} | ||||
| 		int pom = (LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->movement)/100; | ||||
| 		if (pom>25) pom=25; | ||||
| 		if (pom<0) pom=0; | ||||
| 		blitAt(mobile->ourImages[pom].bitmap,posmobx,posmoby+i*32); //move point | ||||
| 		pom = (LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->mana)/5; //bylo: .../10; | ||||
| 		if (pom>25) pom=25; | ||||
| 		if (pom<0) pom=0; | ||||
| 		blitAt(mana->ourImages[pom].bitmap,posmanx,posmany+i*32); //mana | ||||
| 		SDL_Surface * temp = LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->type->portraitSmall; | ||||
| 		blitAt(temp,posporx,pospory+i*32); | ||||
| 		if ((selected == iT) && (LOCPLINT->adventureInt->selection.type == HEROI_TYPE)) | ||||
| 		{ | ||||
| 			blitAt(selection,posporx,pospory+i*32); | ||||
| 		} | ||||
| 		//TODO: support for custom portraits | ||||
| 	} | ||||
| 	if (from>0) | ||||
| 		blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 	else | ||||
| 		blitAt(arrup->ourImages[2].bitmap,arrupp.x,arrupp.y); | ||||
|  | ||||
| 	if (items.size()-from>5) | ||||
| 		blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 	else | ||||
| 		blitAt(arrdo->ourImages[2].bitmap,arrdop.x,arrdop.y); | ||||
| } | ||||
| CTownList::CTownList() | ||||
| { | ||||
| 	pos = genRect(192,48,747,196); | ||||
| 	arrup = CGI->spriteh->giveDef("IAM014.DEF"); | ||||
| 	arrdo = CGI->spriteh->giveDef("IAM015.DEF"); | ||||
|  | ||||
| 	arrupp.x=747; | ||||
| 	arrupp.y=196; | ||||
| 	arrupp.w=arrup->ourImages[0].bitmap->w; | ||||
| 	arrupp.h=arrup->ourImages[0].bitmap->h; | ||||
| 	arrdop.x=747; | ||||
| 	arrdop.y=372; | ||||
| 	arrdop.w=arrdo->ourImages[0].bitmap->w; | ||||
| 	arrdop.h=arrdo->ourImages[0].bitmap->h; | ||||
| 	posporx = 747; | ||||
| 	pospory = 212; | ||||
|  | ||||
| 	pressed = indeterminate; | ||||
|  | ||||
| 	from = 0; | ||||
| 	 | ||||
| } | ||||
| void CTownList::genList() | ||||
| { | ||||
| 	int howMany = LOCPLINT->cb->howManyTowns(); | ||||
| 	for (int i=0;i<howMany;i++) | ||||
| 	{ | ||||
| 		items.push_back(LOCPLINT->cb->getTownInfo(i,0)); | ||||
| 	} | ||||
| } | ||||
| void CTownList::select(int which) | ||||
| { | ||||
| 	selected = which; | ||||
| 	if (which>=items.size())  | ||||
| 		return; | ||||
| 	LOCPLINT->adventureInt->centerOn(items[which]->pos); | ||||
| 	LOCPLINT->adventureInt->selection.type = TOWNI_TYPE; | ||||
| 	LOCPLINT->adventureInt->selection.selected = items[which]; | ||||
| 	LOCPLINT->adventureInt->terrain.currentPath = NULL; | ||||
| 	draw(); | ||||
| 	LOCPLINT->adventureInt->heroList.draw(); | ||||
| } | ||||
| void CTownList::mouseMoved (SDL_MouseMotionEvent & sEvent) | ||||
| { | ||||
| 	if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if (from>0) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advTListUp.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if ((items.size()-from)  >  5) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advTListDown.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	//if not buttons then heroes | ||||
| 	int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 	hx-=pos.x; | ||||
| 	hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 	float ny = (float)hy/(float)32; | ||||
| 	if ((ny>5 || ny<0) || (from+ny>=items.size())) | ||||
| 	{ | ||||
| 		LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	}; | ||||
| 	//LOCPLINT->adventureInt->statusbar.print( items[from+ny]->name + ", " + items[from+ny]->town->name ); //TODO - uncomment when pointer to the town type is initialized | ||||
| } | ||||
| void CTownList::clickLeft(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[1].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = true; | ||||
| 			return; | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[1].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = false; | ||||
| 			return; | ||||
| 		} | ||||
| 		/***************************TOWNS*****************************************/ | ||||
| 		int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 		hx-=pos.x; | ||||
| 		hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 		float ny = (float)hy/(float)32; | ||||
| 		if (ny>5 || ny<0) | ||||
| 			return; | ||||
| 		if (((int)(ny+from))==selected) | ||||
| 			LOCPLINT->openTownWindow(items[selected]);//print town screen | ||||
| 		else | ||||
| 			select(ny+from); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (indeterminate(pressed)) | ||||
| 			return; | ||||
| 		if (pressed) //up | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from--; | ||||
| 				if (from<0) | ||||
| 					from=0; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (!pressed) //down | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from++; | ||||
| 				//if (from<items.size()-5) | ||||
| 				//	from=items.size()-5; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 			throw 0; | ||||
|  | ||||
| 	} | ||||
| } | ||||
| void CTownList::clickRight(tribool down) | ||||
| {	 | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListUp.second,down,this); | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListDown.second,down,this); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListUp.second,down,this); | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advTListDown.second,down,this); | ||||
| 	} | ||||
| } | ||||
| void CTownList::hover (bool on) | ||||
| { | ||||
| } | ||||
| void CTownList::keyPressed (SDL_KeyboardEvent & key) | ||||
| { | ||||
| } | ||||
| void CTownList::draw() | ||||
| {	 | ||||
| 	for (int iT=0+from;iT<5+from;iT++) | ||||
| 	{ | ||||
| 		int i = iT-from; | ||||
| 		if (iT>=items.size()) | ||||
| 		{ | ||||
| 			blitAt(CGI->townh->getPic(-1),posporx,pospory+i*32); | ||||
| 			continue; | ||||
| 		} | ||||
|  | ||||
| 		blitAt(CGI->townh->getPic(items[i]->subID,items[i]->hasFort(),items[i]->builded),posporx,pospory+i*32); | ||||
|  | ||||
| 		if ((selected == iT) && (LOCPLINT->adventureInt->selection.type == TOWNI_TYPE)) | ||||
| 		{ | ||||
| 			blitAt(CGI->townh->getPic(-2),posporx,pospory+i*32); | ||||
| 		} | ||||
| 	} | ||||
| 	if (from>0) | ||||
| 		blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 	else | ||||
| 		blitAt(arrup->ourImages[2].bitmap,arrupp.x,arrupp.y); | ||||
|  | ||||
| 	if (items.size()-from>5) | ||||
| 		blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 	else | ||||
| 		blitAt(arrdo->ourImages[2].bitmap,arrdop.x,arrdop.y); | ||||
| } | ||||
| CMinimap::CMinimap(bool draw) | ||||
| { | ||||
| 	statusbarTxt = CGI->preth->advWorldMap.first; | ||||
| @@ -1235,8 +806,12 @@ nextHero(CGI->preth->advNextHero.first,CGI->preth->advNextHero.second, | ||||
| 		  &CAdvMapInt::fnextHero, 679, 324, "IAM000.DEF", this), | ||||
|  | ||||
| endTurn(CGI->preth->advEndTurn.first,CGI->preth->advEndTurn.second, | ||||
| 		  &CAdvMapInt::fendTurn, 679, 356, "IAM001.DEF", this) | ||||
| 		  &CAdvMapInt::fendTurn, 679, 356, "IAM001.DEF", this), | ||||
|  | ||||
| townList(5,&genRect(192,48,747,196),747,196,747,372) | ||||
| { | ||||
| 	townList.owner = this; | ||||
| 	townList.fun = &CAdvMapInt::selectionChanged; | ||||
| 	LOCPLINT->adventureInt=this; | ||||
| 	bg = CGI->bitmaph->loadBitmap("ADVMAP.bmp"); | ||||
| 	blueToPlayersAdv(bg,player); | ||||
| @@ -1401,6 +976,16 @@ void CAdvMapInt::update() | ||||
| 	//updateRect(&genRect(550,600,6,6)); | ||||
| } | ||||
|  | ||||
| void CAdvMapInt::selectionChanged() | ||||
| { | ||||
| 	const CGTownInstance *to = townList.items[townList.selected]; | ||||
| 	centerOn(to->pos); | ||||
| 	selection.type = TOWNI_TYPE; | ||||
| 	selection.selected = to; | ||||
| 	terrain.currentPath = NULL; | ||||
| 	townList.draw(); | ||||
| 	heroList.draw(); | ||||
| } | ||||
| void CAdvMapInt::centerOn(int3 on) | ||||
| { | ||||
| 	on.x -= (LOCPLINT->adventureInt->terrain.tilesw/2); | ||||
|   | ||||
| @@ -35,66 +35,6 @@ public: | ||||
| 	AdventureMapButton( std::string Name, std::string HelpBox, void(T::*Function)(), int x, int y, std::string defName, T* Owner, bool activ=false,  std::vector<std::string> * add = NULL );//c-tor | ||||
| }; | ||||
| /*****************************/ | ||||
| class CList  | ||||
| 	: public ClickableL, public ClickableR, public Hoverable, public KeyInterested, public virtual CIntObject, public MotionInterested | ||||
| { | ||||
| public: | ||||
| 	SDL_Surface * bg; | ||||
| 	CDefHandler *arrup, *arrdo; | ||||
| 	SDL_Surface *empty, *selection;  | ||||
| 	SDL_Rect arrupp, arrdop; //positions of arrows | ||||
| 	int posw, posh; //position width/height | ||||
| 	int selected, //id of selected position, <0 if none | ||||
| 		from;  | ||||
| 	tribool pressed; //true=up; false=down; indeterminate=none | ||||
|  | ||||
| 	void clickLeft(tribool down); | ||||
| 	void activate();  | ||||
| 	void deactivate(); | ||||
| 	virtual void mouseMoved (SDL_MouseMotionEvent & sEvent)=0; | ||||
| 	virtual void genList()=0; | ||||
| 	virtual void select(int which)=0; | ||||
| 	virtual void draw()=0; | ||||
| }; | ||||
| class CHeroList  | ||||
| 	: public CList | ||||
| { | ||||
| public: | ||||
| 	CDefHandler *mobile, *mana; | ||||
| 	std::vector<std::pair<const CGHeroInstance*, CPath *> > items; | ||||
| 	int posmobx, posporx, posmanx, posmoby, pospory, posmany; | ||||
|  | ||||
| 	CHeroList(); | ||||
| 	void genList(); | ||||
| 	void select(int which); | ||||
| 	void mouseMoved (SDL_MouseMotionEvent & sEvent); | ||||
| 	void clickLeft(tribool down); | ||||
| 	void clickRight(tribool down); | ||||
| 	void hover (bool on); | ||||
| 	void keyPressed (SDL_KeyboardEvent & key); | ||||
| 	void updateHList(); | ||||
| 	void updateMove(const CGHeroInstance* which); //draws move points bar | ||||
| 	void redrawAllOne(int which); | ||||
| 	void draw(); | ||||
| 	void init(); | ||||
| }; | ||||
| class CTownList  | ||||
| 	: public CList | ||||
| { | ||||
| public:  | ||||
| 	std::vector<const CGTownInstance*> items; | ||||
| 	int posporx,pospory; | ||||
|  | ||||
| 	CTownList(); | ||||
| 	void genList(); | ||||
| 	void select(int which); | ||||
| 	void mouseMoved (SDL_MouseMotionEvent & sEvent); | ||||
| 	void clickLeft(tribool down); | ||||
| 	void clickRight(tribool down); | ||||
| 	void hover (bool on); | ||||
| 	void keyPressed (SDL_KeyboardEvent & key); | ||||
| 	void draw(); | ||||
| }; | ||||
| class CMinimap | ||||
| 	: public ClickableL, public ClickableR, public Hoverable, public MotionInterested, public virtual CIntObject | ||||
| { | ||||
| @@ -220,7 +160,7 @@ public: | ||||
| 	CResDataBar resdatabar; | ||||
| 	 | ||||
| 	CHeroList heroList; | ||||
| 	CTownList townList;	 | ||||
| 	CTownList<CAdvMapInt> townList;	 | ||||
| 	CInfoBar infoBar; | ||||
|  | ||||
| 	CHeroWindow * heroWindow; | ||||
| @@ -251,6 +191,7 @@ public: | ||||
| 	void hide(); //deactivates advmap interface | ||||
| 	void update(); //redraws terrain | ||||
|  | ||||
| 	void selectionChanged(); | ||||
| 	void centerOn(int3 on); | ||||
| 	int3 verifyPos(int3 ver); | ||||
| 	void handleRightClick(std::string text, tribool down, CIntObject * client); | ||||
|   | ||||
| @@ -421,7 +421,7 @@ int CCallback::swapCreatures(const CGObjectInstance *s1, const CGObjectInstance | ||||
| 				S2->slots.erase(p2); | ||||
| 			if(s1->tempOwner<PLAYER_LIMIT) | ||||
| 				CGI->playerint[s1->tempOwner]->garrisonChanged(s1); | ||||
| 			if(s2->tempOwner<PLAYER_LIMIT) | ||||
| 			if((s2->tempOwner<PLAYER_LIMIT) && (s2 != s1)) | ||||
| 				CGI->playerint[s2->tempOwner]->garrisonChanged(s2); | ||||
| 			return 0; | ||||
| 		} | ||||
|   | ||||
| @@ -8,7 +8,6 @@ | ||||
| #include "hch/CTownHandler.h" | ||||
| #include "AdventureMapButton.h" | ||||
| #include <sstream> | ||||
|  | ||||
| CBuildingRect::CBuildingRect(Structure *Str) | ||||
| :str(Str) | ||||
| {	 | ||||
| @@ -151,23 +150,32 @@ public: | ||||
| } srthlp ; | ||||
|  | ||||
| CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate) | ||||
| { | ||||
| 	hBuild = NULL; | ||||
| 	count=0; | ||||
| 	town = Town; | ||||
| {	 | ||||
| 	townInt = CGI->bitmaph->loadBitmap("TOWNSCRN.bmp"); | ||||
| 	cityBg = CGI->bitmaph->loadBitmap(getBgName(town->subID)); | ||||
| 	cityBg = CGI->bitmaph->loadBitmap(getBgName(Town->subID)); | ||||
| 	hall = CGI->spriteh->giveDef("ITMTL.DEF"); | ||||
| 	fort = CGI->spriteh->giveDef("ITMCL.DEF"); | ||||
| 	bigTownPic =  CGI->spriteh->giveDef("ITPT.DEF"); | ||||
| 	flag =  CGI->spriteh->giveDef("CREST58.DEF"); | ||||
| 	CSDL_Ext::blueToPlayersAdv(townInt,LOCPLINT->playerID); | ||||
| 	townlist = new CTownList<CCastleInterface>(3,&genRect(128,48,744,414),744,414,744,526); | ||||
| 	exit = new AdventureMapButton<CCastleInterface> | ||||
| 		(CGI->townh->tcommands[8],"",&CCastleInterface::close,744,544,"TSBTNS.DEF",this,false); | ||||
| 	split = new AdventureMapButton<CCastleInterface> | ||||
| 		(CGI->townh->tcommands[8],"",&CCastleInterface::splitF,744,382,"TSBTNS.DEF",this,false); | ||||
| 	exit->bitmapOffset = 4; | ||||
| 		(CGI->townh->tcommands[3],"",&CCastleInterface::splitF,744,382,"TSBTNS.DEF",this,false); | ||||
| 	statusbar = new CStatusBar(8,555,"TSTATBAR.bmp",732); | ||||
|  | ||||
| 	townlist->owner = this; | ||||
| 	townlist->fun = &CCastleInterface::townChange; | ||||
| 	townlist->genList(); | ||||
| 	townlist->selected = getIndexOf(townlist->items,Town); | ||||
| 	if((townlist->selected+1) > townlist->SIZE) | ||||
| 		townlist->from = townlist->selected -  townlist->SIZE + 1; | ||||
| 	hBuild = NULL; | ||||
| 	count=0; | ||||
| 	town = Town; | ||||
|  | ||||
| 	CSDL_Ext::blueToPlayersAdv(townInt,LOCPLINT->playerID); | ||||
| 	exit->bitmapOffset = 4; | ||||
| 	std::set< std::pair<int,int> > s; //group - id | ||||
|  | ||||
|  | ||||
| @@ -251,6 +259,8 @@ CCastleInterface::~CCastleInterface() | ||||
| 	delete bigTownPic; | ||||
| 	delete flag; | ||||
| 	delete garr; | ||||
| 	delete townlist; | ||||
| 	delete statusbar; | ||||
| 	for(int i=0;i<buildings.size();i++) | ||||
| 	{ | ||||
| 		delete buildings[i]; | ||||
| @@ -276,6 +286,7 @@ void CCastleInterface::showAll(SDL_Surface * to) | ||||
| 	blitAt(cityBg,0,0,to); | ||||
| 	blitAt(townInt,0,374,to); | ||||
| 	LOCPLINT->adventureInt->resdatabar.draw(); | ||||
| 	townlist->draw(); | ||||
|  | ||||
| 	int pom; | ||||
|  | ||||
| @@ -353,6 +364,14 @@ void CCastleInterface::showAll(SDL_Surface * to) | ||||
| 	//} | ||||
| 	show(); | ||||
| } | ||||
| void CCastleInterface::townChange() | ||||
| { | ||||
| 	const CGTownInstance * nt = townlist->items[townlist->selected]; | ||||
| 	deactivate(); | ||||
| 	LOCPLINT->objsToBlit.erase(std::find(LOCPLINT->objsToBlit.begin(),LOCPLINT->objsToBlit.end(),this)); | ||||
| 	delete this; | ||||
| 	LOCPLINT->castleInt = new CCastleInterface(nt,true); | ||||
| } | ||||
| void CCastleInterface::show(SDL_Surface * to) | ||||
| { | ||||
| 	if (!to) | ||||
| @@ -393,6 +412,7 @@ void CCastleInterface::show(SDL_Surface * to) | ||||
| } | ||||
| void CCastleInterface::activate() | ||||
| { | ||||
| 	townlist->activate(); | ||||
| 	garr->activate(); | ||||
| 	LOCPLINT->curint = this; | ||||
| 	LOCPLINT->statusbar = statusbar; | ||||
| @@ -403,6 +423,7 @@ void CCastleInterface::activate() | ||||
| } | ||||
| void CCastleInterface::deactivate() | ||||
| { | ||||
| 	townlist->deactivate(); | ||||
| 	garr->deactivate(); | ||||
| 	exit->deactivate(); | ||||
| 	split->deactivate(); | ||||
|   | ||||
| @@ -39,6 +39,8 @@ public: | ||||
| 	CDefHandler *hall,*fort, | ||||
| 		*bigTownPic, *flag; | ||||
|  | ||||
| 	CTownList<CCastleInterface> * townlist; | ||||
|  | ||||
| 	CGarrisonInt * garr; | ||||
| 	AdventureMapButton<CCastleInterface> * exit, *split; | ||||
|  | ||||
| @@ -46,6 +48,7 @@ public: | ||||
|  | ||||
| 	CCastleInterface(const CGTownInstance * Town, bool Activate=true); | ||||
| 	~CCastleInterface(); | ||||
| 	void townChange(); | ||||
| 	void show(SDL_Surface * to=NULL); | ||||
| 	void showAll(SDL_Surface * to=NULL); | ||||
| 	void close(); | ||||
|   | ||||
| @@ -200,7 +200,7 @@ void CHeroWindow::setHero(const CGHeroInstance *hero) | ||||
|  | ||||
| 	delete garInt; | ||||
| 	garInt = new CGarrisonInt(80, 493, 8, 0, curBack, 13, 482, curHero); | ||||
|  | ||||
| 	garInt->update = false; | ||||
| 	for(int g=0; g<primSkillAreas.size(); ++g) | ||||
| 	{ | ||||
| 		primSkillAreas[g]->bonus = hero->primSkills[g]; | ||||
|   | ||||
							
								
								
									
										5
									
								
								CMT.cpp
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								CMT.cpp
									
									
									
									
									
								
							| @@ -280,7 +280,7 @@ int _tmain(int argc, _TCHAR* argv[]) | ||||
| {  | ||||
| 	//std::ios_base::sync_with_stdio(0); | ||||
| 	//CLuaHandler luatest; | ||||
| 	//luatest.test(); | ||||
| 	//luatest.test();  | ||||
| 	 | ||||
| 		//CBIKHandler cb; | ||||
| 		//cb.open("CSECRET.BIK"); | ||||
| @@ -294,6 +294,7 @@ int _tmain(int argc, _TCHAR* argv[]) | ||||
| 	float i; | ||||
| 	if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER|SDL_INIT_AUDIO/*|SDL_INIT_EVENTTHREAD*/)==0) | ||||
| 	{ | ||||
| 		screen = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/); | ||||
| 		CPG=NULL; | ||||
| 		TTF_Init(); | ||||
| 		atexit(TTF_Quit); | ||||
| @@ -305,7 +306,6 @@ int _tmain(int argc, _TCHAR* argv[]) | ||||
| 		GEOR16 = TTF_OpenFont("Fonts\\georgia.ttf",16); | ||||
| 		GEORXX = TTF_OpenFont("Fonts\\tnrb.ttf",22); | ||||
| 		GEORM = TTF_OpenFont("Fonts\\georgia.ttf",10); | ||||
|  | ||||
| 		CMusicHandler * mush = new CMusicHandler;  //initializing audio | ||||
| 		mush->initMusics(); | ||||
| 		//audio initialized  | ||||
| @@ -316,7 +316,6 @@ int _tmain(int argc, _TCHAR* argv[]) | ||||
| 		}*/ | ||||
|  | ||||
| 		//screen2 = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/); | ||||
| 		screen = SDL_SetVideoMode(800,600,24,SDL_SWSURFACE|SDL_DOUBLEBUF/*|SDL_FULLSCREEN*/); | ||||
| 		//screen = SDL_ConvertSurface(screen2, screen2->format, SDL_SWSURFACE); | ||||
| 		ekran = screen; | ||||
|  | ||||
|   | ||||
| @@ -21,6 +21,7 @@ | ||||
| #include "timeHandler.h" | ||||
| #include <boost/algorithm/string.hpp> | ||||
| #include <boost/algorithm/string/replace.hpp> | ||||
| #include "hch\CPreGameTextHandler.h" | ||||
| using namespace CSDL_Ext; | ||||
|  | ||||
| extern TTF_Font * GEOR16; | ||||
| @@ -155,14 +156,16 @@ void CGarrisonSlot::show() | ||||
| 		printTo(buf,pos.x+56,pos.y+62,GEOR16,zwykly); | ||||
| 		if(owner->highlighted==this) | ||||
| 			blitAt(CGI->creh->bigImgs[-1],pos); | ||||
| 		updateRect(&pos,ekran); | ||||
| 		if(owner->update) | ||||
| 			updateRect(&pos,ekran); | ||||
| 		delete [] buf; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		SDL_Rect jakis1 = genRect(pos.h,pos.w,owner->offx+ID*(pos.w+owner->interx),owner->offy+upg*(pos.h+owner->intery)), jakis2 = pos; | ||||
| 		SDL_BlitSurface(owner->sur,&jakis1,ekran,&jakis2); | ||||
| 		SDL_UpdateRect(ekran,pos.x,pos.y,pos.w,pos.h); | ||||
| 		if(owner->update) | ||||
| 			SDL_UpdateRect(ekran,pos.x,pos.y,pos.w,pos.h); | ||||
| 	} | ||||
| } | ||||
| CGarrisonInt::~CGarrisonInt() | ||||
| @@ -312,6 +315,7 @@ CGarrisonInt::CGarrisonInt(int x, int y, int inx, int iny, SDL_Surface *pomsur, | ||||
| 	set1 = LOCPLINT->cb->getGarrison(s1); | ||||
| 	set2 = LOCPLINT->cb->getGarrison(s2); | ||||
| 	ignoreEvent = false; | ||||
| 	update = true; | ||||
| 	pos.x=(x); | ||||
| 	pos.y=(y); | ||||
| 	pos.w=(58); | ||||
| @@ -1961,4 +1965,251 @@ void CStatusBar::show() | ||||
| std::string CStatusBar::getCurrent() | ||||
| { | ||||
| 	return current; | ||||
| } | ||||
| void CList::activate() | ||||
| { | ||||
| 	ClickableL::activate(); | ||||
| 	ClickableR::activate(); | ||||
| 	Hoverable::activate(); | ||||
| 	KeyInterested::activate(); | ||||
| 	MotionInterested::activate(); | ||||
| };  | ||||
| void CList::deactivate() | ||||
| { | ||||
| 	ClickableL::deactivate(); | ||||
| 	ClickableR::deactivate(); | ||||
| 	Hoverable::deactivate(); | ||||
| 	KeyInterested::deactivate(); | ||||
| 	MotionInterested::deactivate(); | ||||
| };  | ||||
| void CList::clickLeft(tribool down) | ||||
| { | ||||
| }; | ||||
| CList::CList(int Size) | ||||
| :SIZE(Size) | ||||
| { | ||||
| } | ||||
| CHeroList::CHeroList(int Size) | ||||
| :CList(Size) | ||||
| { | ||||
| 	pos = genRect(192,64,609,196); | ||||
| 	 | ||||
| 	arrupp = genRect(16,64,609,196); | ||||
| 	arrdop = genRect(16,64,609,372); | ||||
|  //32px per hero | ||||
| 	posmobx = 610; | ||||
| 	posmoby = 213; | ||||
| 	posporx = 617; | ||||
| 	pospory = 212; | ||||
| 	posmanx = 666; | ||||
| 	posmany = 213; | ||||
| 	 | ||||
| 	arrup = CGI->spriteh->giveDef("IAM012.DEF"); | ||||
| 	arrdo = CGI->spriteh->giveDef("IAM013.DEF"); | ||||
| 	mobile = CGI->spriteh->giveDef("IMOBIL.DEF"); | ||||
| 	mana = CGI->spriteh->giveDef("IMANA.DEF"); | ||||
| 	empty = CGI->bitmaph->loadBitmap("HPSXXX.bmp"); | ||||
| 	selection = CGI->bitmaph->loadBitmap("HPSYYY.bmp"); | ||||
| 	SDL_SetColorKey(selection,SDL_SRCCOLORKEY,SDL_MapRGB(selection->format,0,255,255)); | ||||
| 	from = 0; | ||||
| 	pressed = indeterminate; | ||||
| } | ||||
|  | ||||
| void CHeroList::init() | ||||
| { | ||||
| 	bg = CSDL_Ext::newSurface(68,193,ekran); | ||||
| 	SDL_BlitSurface(LOCPLINT->adventureInt->bg,&genRect(193,68,607,196),bg,&genRect(193,68,0,0)); | ||||
| } | ||||
| void CHeroList::genList() | ||||
| { | ||||
| 	int howMany = LOCPLINT->cb->howManyHeroes(); | ||||
| 	for (int i=0;i<howMany;i++) | ||||
| 	{ | ||||
| 		items.push_back(std::pair<const CGHeroInstance *,CPath *>(LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,i,0),NULL)); | ||||
| 	} | ||||
| } | ||||
| void CHeroList::select(int which) | ||||
| { | ||||
| 	selected = which; | ||||
| 	if (which>=items.size())  | ||||
| 		return; | ||||
| 	LOCPLINT->adventureInt->centerOn(items[which].first->pos); | ||||
| 	LOCPLINT->adventureInt->selection.type = HEROI_TYPE; | ||||
| 	LOCPLINT->adventureInt->selection.selected = items[which].first; | ||||
| 	LOCPLINT->adventureInt->terrain.currentPath = items[which].second; | ||||
| 	draw(); | ||||
| 	LOCPLINT->adventureInt->townList.draw(); | ||||
| 	 | ||||
| 	LOCPLINT->adventureInt->infoBar.draw(NULL); | ||||
| } | ||||
| void CHeroList::clickLeft(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[1].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = true; | ||||
| 			return; | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[1].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = false; | ||||
| 			return; | ||||
| 		} | ||||
| 		/***************************HEROES*****************************************/ | ||||
| 		int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 		hx-=pos.x; | ||||
| 		hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 		float ny = (float)hy/(float)32; | ||||
| 		if (ny>=5 || ny<0) | ||||
| 			return; | ||||
| 		if (((int)(ny+from))==selected && (LOCPLINT->adventureInt->selection.type == HEROI_TYPE)) | ||||
| 			LOCPLINT->openHeroWindow(items[selected].first);//print hero screen | ||||
| 		select(ny+from); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (indeterminate(pressed)) | ||||
| 			return; | ||||
| 		if (pressed) //up | ||||
| 		{ | ||||
| 			blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from--; | ||||
| 				if (from<0) | ||||
| 					from=0; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else if (!pressed) //down | ||||
| 		{ | ||||
| 			blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 			pressed = indeterminate; | ||||
| 			if (!down) | ||||
| 			{ | ||||
| 				from++; | ||||
| 				//if (from<items.size()-5) | ||||
| 				//	from=items.size()-5; | ||||
| 				draw(); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 			throw 0; | ||||
|  | ||||
| 	} | ||||
| } | ||||
| void CHeroList::mouseMoved (SDL_MouseMotionEvent & sEvent) | ||||
| { | ||||
| 	if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if (from>0) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advHListUp.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y)) | ||||
| 	{ | ||||
| 		if ((items.size()-from)  >  5) | ||||
| 			LOCPLINT->adventureInt->statusbar.print(CGI->preth->advHListDown.first); | ||||
| 		else | ||||
| 			LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	//if not buttons then heroes | ||||
| 	int hx = LOCPLINT->current->motion.x, hy = LOCPLINT->current->motion.y; | ||||
| 	hx-=pos.x; | ||||
| 	hy-=pos.y; hy-=arrup->ourImages[0].bitmap->h; | ||||
| 	float ny = (float)hy/(float)32; | ||||
| 	if ((ny>5 || ny<0) || (from+ny>=items.size())) | ||||
| 	{ | ||||
| 		LOCPLINT->adventureInt->statusbar.clear(); | ||||
| 		return; | ||||
| 	} | ||||
| 	std::vector<std::string> temp; | ||||
| 	temp.push_back(items[from+ny].first->name); | ||||
| 	temp.push_back(items[from+ny].first->type->heroClass->name); | ||||
| 	LOCPLINT->adventureInt->statusbar.print( processStr(CGI->generaltexth->allTexts[15],temp) ); | ||||
| 	//select(ny+from); | ||||
| } | ||||
| void CHeroList::clickRight(tribool down) | ||||
| { | ||||
| 	if (down) | ||||
| 	{ | ||||
| 		/***************************ARROWS*****************************************/ | ||||
| 		if(isItIn(&arrupp,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && from>0) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListUp.second,down,this); | ||||
| 		} | ||||
| 		else if(isItIn(&arrdop,LOCPLINT->current->motion.x,LOCPLINT->current->motion.y) && (items.size()-from>5)) | ||||
| 		{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListDown.second,down,this); | ||||
| 		} | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListUp.second,down,this); | ||||
| 			LOCPLINT->adventureInt->handleRightClick(CGI->preth->advHListDown.second,down,this); | ||||
| 	} | ||||
| } | ||||
| void CHeroList::hover (bool on) | ||||
| { | ||||
| } | ||||
| void CHeroList::keyPressed (SDL_KeyboardEvent & key) | ||||
| { | ||||
| } | ||||
| void CHeroList::updateHList() | ||||
| { | ||||
| 	items.clear(); | ||||
| 	genList(); | ||||
| } | ||||
| void CHeroList::updateMove(const CGHeroInstance* which) //draws move points bar | ||||
| { | ||||
| 	int ser = LOCPLINT->cb->getHeroSerial(which); | ||||
| 	ser -= from; | ||||
| 	int pom = (which->movement)/100; | ||||
| 	blitAt(mobile->ourImages[pom].bitmap,posmobx,posmoby+ser*32); //move point | ||||
| } | ||||
| void CHeroList::draw() | ||||
| {	 | ||||
| 	for (int iT=0+from;iT<5+from;iT++) | ||||
| 	{ | ||||
| 		int i = iT-from; | ||||
| 		if (iT>=items.size()) | ||||
| 		{ | ||||
| 			blitAt(mobile->ourImages[0].bitmap,posmobx,posmoby+i*32); | ||||
| 			blitAt(mana->ourImages[0].bitmap,posmanx,posmany+i*32); | ||||
| 			blitAt(empty,posporx,pospory+i*32); | ||||
| 			continue; | ||||
| 		} | ||||
| 		int pom = (LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->movement)/100; | ||||
| 		if (pom>25) pom=25; | ||||
| 		if (pom<0) pom=0; | ||||
| 		blitAt(mobile->ourImages[pom].bitmap,posmobx,posmoby+i*32); //move point | ||||
| 		pom = (LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->mana)/5; //bylo: .../10; | ||||
| 		if (pom>25) pom=25; | ||||
| 		if (pom<0) pom=0; | ||||
| 		blitAt(mana->ourImages[pom].bitmap,posmanx,posmany+i*32); //mana | ||||
| 		SDL_Surface * temp = LOCPLINT->cb->getHeroInfo(LOCPLINT->playerID,iT,0)->type->portraitSmall; | ||||
| 		blitAt(temp,posporx,pospory+i*32); | ||||
| 		if ((selected == iT) && (LOCPLINT->adventureInt->selection.type == HEROI_TYPE)) | ||||
| 		{ | ||||
| 			blitAt(selection,posporx,pospory+i*32); | ||||
| 		} | ||||
| 		//TODO: support for custom portraits | ||||
| 	} | ||||
| 	if (from>0) | ||||
| 		blitAt(arrup->ourImages[0].bitmap,arrupp.x,arrupp.y); | ||||
| 	else | ||||
| 		blitAt(arrup->ourImages[2].bitmap,arrupp.x,arrupp.y); | ||||
|  | ||||
| 	if (items.size()-from>5) | ||||
| 		blitAt(arrdo->ourImages[0].bitmap,arrdop.x,arrdop.y); | ||||
| 	else | ||||
| 		blitAt(arrdo->ourImages[2].bitmap,arrdop.x,arrdop.y); | ||||
| } | ||||
| @@ -215,7 +215,7 @@ public: | ||||
|  | ||||
| 	SDL_Surface *sur; | ||||
| 	int offx, offy; | ||||
| 	bool ignoreEvent; | ||||
| 	bool ignoreEvent, update; | ||||
|  | ||||
| 	const CCreatureSet *set1; | ||||
| 	const CCreatureSet *set2; | ||||
| @@ -312,4 +312,71 @@ public: | ||||
| 	void clear();//clears statusbar and refreshes | ||||
| 	void show(); //shows statusbar (with current text) | ||||
| 	std::string getCurrent(); | ||||
| }; | ||||
|  | ||||
| class CList  | ||||
| 	: public ClickableL, public ClickableR, public Hoverable, public KeyInterested, public virtual CIntObject, public MotionInterested | ||||
| { | ||||
| public: | ||||
| 	SDL_Surface * bg; | ||||
| 	CDefHandler *arrup, *arrdo; | ||||
| 	SDL_Surface *empty, *selection;  | ||||
| 	SDL_Rect arrupp, arrdop; //positions of arrows | ||||
| 	int posw, posh; //position width/height | ||||
| 	int selected, //id of selected position, <0 if none | ||||
| 		from;  | ||||
| 	const int SIZE; | ||||
| 	tribool pressed; //true=up; false=down; indeterminate=none | ||||
|  | ||||
| 	CList(int Size = 5); | ||||
| 	void clickLeft(tribool down); | ||||
| 	void activate();  | ||||
| 	void deactivate(); | ||||
| 	virtual void mouseMoved (SDL_MouseMotionEvent & sEvent)=0; | ||||
| 	virtual void genList()=0; | ||||
| 	virtual void select(int which)=0; | ||||
| 	virtual void draw()=0; | ||||
| }; | ||||
| class CHeroList  | ||||
| 	: public CList | ||||
| { | ||||
| public: | ||||
| 	CDefHandler *mobile, *mana; | ||||
| 	std::vector<std::pair<const CGHeroInstance*, CPath *> > items; | ||||
| 	int posmobx, posporx, posmanx, posmoby, pospory, posmany; | ||||
|  | ||||
| 	CHeroList(int Size = 5); | ||||
| 	void genList(); | ||||
| 	void select(int which); | ||||
| 	void mouseMoved (SDL_MouseMotionEvent & sEvent); | ||||
| 	void clickLeft(tribool down); | ||||
| 	void clickRight(tribool down); | ||||
| 	void hover (bool on); | ||||
| 	void keyPressed (SDL_KeyboardEvent & key); | ||||
| 	void updateHList(); | ||||
| 	void updateMove(const CGHeroInstance* which); //draws move points bar | ||||
| 	void redrawAllOne(int which); | ||||
| 	void draw(); | ||||
| 	void init(); | ||||
| }; | ||||
| template<typename T> | ||||
| class CTownList  | ||||
| 	: public CList | ||||
| { | ||||
| public:  | ||||
| 	T* owner; | ||||
| 	void(T::*fun)(); | ||||
| 	std::vector<const CGTownInstance*> items; | ||||
| 	int posporx,pospory; | ||||
|  | ||||
| 	CTownList(int Size, SDL_Rect * Pos, int arupx, int arupy, int ardox, int ardoy); | ||||
| 	~CTownList(); | ||||
| 	void genList(); | ||||
| 	void select(int which); | ||||
| 	void mouseMoved (SDL_MouseMotionEvent & sEvent); | ||||
| 	void clickLeft(tribool down); | ||||
| 	void clickRight(tribool down); | ||||
| 	void hover (bool on); | ||||
| 	void keyPressed (SDL_KeyboardEvent & key); | ||||
| 	void draw(); | ||||
| }; | ||||
| @@ -13,6 +13,13 @@ void blitAtWR(SDL_Surface * src, SDL_Rect pos, SDL_Surface * dst=ekran); | ||||
| void blitAt(SDL_Surface * src, SDL_Rect pos, SDL_Surface * dst=ekran); | ||||
| void updateRect (SDL_Rect * rect, SDL_Surface * scr = ekran); | ||||
| bool isItIn(const SDL_Rect * rect, int x, int y); | ||||
| template <typename T> int getIndexOf(const std::vector<T> & v, const T & val) | ||||
| { | ||||
| 	for(int i=0;i<v.size();i++) | ||||
| 		if(v[i]==val) | ||||
| 			return i; | ||||
| 	return -1; | ||||
| } | ||||
| SDL_Rect genRect(int hh, int ww, int xx, int yy); | ||||
| namespace CSDL_Ext | ||||
| { | ||||
|   | ||||
| @@ -92,7 +92,7 @@ | ||||
| 2 23 TBTWEXT2.def 592 189 | ||||
| 2 11 TBTWHAL2.def 0 220 | ||||
| 2 12 TBTWHAL3.def 0 82 | ||||
| 2 12 TBTWHAL4.def 0 82 | ||||
| 2 13 TBTWHAL4.def 0 82 | ||||
| 2 10 TBTWHALL.def 0 259 | ||||
| 2 26 TBTWHOLY.def 237 14 | ||||
| 2 18 TBTWHRD1.def 0 47 | ||||
| @@ -151,4 +151,46 @@ | ||||
| 3 41 TBINUP_4.def 359 244 | ||||
| 3 42 TBINUP_5.def 220 282 | ||||
| 3 43 TBINUP_6.def 420 105 | ||||
| 3 8 TBINCAS2.def 222 44 | ||||
| 3 8 TBINCAS2.def 222 44 | ||||
| 4 16 TBNCBLAK.def 382 252 | ||||
| 4 8 TBNCCAS2.def 139 66 | ||||
| 4 9 TBNCCAS3.def 34 18 | ||||
| 4 7 TBNCCSTL.def 138 66 | ||||
| 4 6 TBNCDOCK.def 617 265 | ||||
| 4 30 TBNCDW_0.def 80 222 | ||||
| 4 31 TBNCDW_1.def 502 223 | ||||
| 4 32 TBNCDW_2.def 0 187 | ||||
| 4 33 TBNCDW_3.def 607 212 | ||||
| 4 34 TBNCDW_4.def 206 207 | ||||
| 4 35 TBNCDW_5.def 0 31 | ||||
| 4 36 TBNCDW_6.def 663 25 | ||||
| 4 21 TBNCEXT0.def 307 61 | ||||
| 4 22 TBNCEXT1.def 247 275 | ||||
| 4 -1 TBNCEXT2.def 25 279 | ||||
| 4 27 TBNCEXT3.def 307 246 | ||||
| 4 28 TBNCEXT4.def 321 255 | ||||
| 4 29 TBNCEXT5.def 475 257 | ||||
| 4 11 TBNCHAL2.def 482 56 | ||||
| 4 12 TBNCHAL3.def 478 26 | ||||
| 4 13 TBNCHAL4.def 481 26 | ||||
| 4 10 TBNCHALL.def 468 76 | ||||
| 4 26 TBNCHOLY.def 410 88 | ||||
| 4 18 TBNCHRD1.def 80 222 | ||||
| 4 19 TBNCHRD2.def 64 222 | ||||
| 4 1 TBNCMAG2.def 341 97 | ||||
| 4 2 TBNCMAG3.def 341 78 | ||||
| 4 3 TBNCMAG4.def 340 62 | ||||
| 4 4 TBNCMAG5.def 343 35 | ||||
| 4 0 TBNCMAGE.def 341 116 | ||||
| 4 14 TBNCMARK.def 347 215 | ||||
| 4 15 TBNCSILO.def 276 185 | ||||
| 4 17 TBNCSPEC.def 18 0 | ||||
| 4 5 TBNCTVRN.def 508 189 | ||||
| 4 37 TBNCUP_0.def 64 222 | ||||
| 4 38 TBNCUP_1.def 498 224 | ||||
| 4 39 TBNCUP_2.def 0 179 | ||||
| 4 40 TBNCUP_3.def 615 193 | ||||
| 4 41 TBNCUP_4.def 222 171 | ||||
| 4 42 TBNCUP_5.def 0 30 | ||||
| 4 43 TBNCUP_6.def 662 23 | ||||
| 4 20 TBNCBOAT.def 617 265 | ||||
| @@ -108,6 +108,37 @@ CASTLE 3 | ||||
| 35 | ||||
| 42 | ||||
| END | ||||
| CASTLE 4 | ||||
| 17 | ||||
| 0 | ||||
| 1 | ||||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 7 | ||||
| 8 | ||||
| 9 | ||||
| 32 | ||||
| 39 | ||||
| 26 | ||||
| 15 | ||||
| 14 | ||||
| 34 | ||||
| 41 | ||||
| 16 | ||||
| 5 | ||||
| 33 | ||||
| 40 | ||||
| 31 | ||||
| 38 | ||||
| 6 | ||||
| 30 | ||||
| 18 | ||||
| 37 | ||||
| 19 | ||||
| 22 | ||||
| 20 | ||||
| END | ||||
| EOD | ||||
|  | ||||
| ------------------------------------------------------------------ | ||||
|   | ||||
| @@ -147,4 +147,42 @@ | ||||
| 3	40	TBINUP_3.def	TOIDMN2.bmp	TZIDMN2.bmp | ||||
| 3	41	TBINUP_4.def	TOIPIT2.bmp	TZIPIT2.bmp | ||||
| 3	42	TBINUP_5.def	TOIEFR2.bmp	TZIEFR2.bmp | ||||
| 3	43	TBINUP_6.def	TOIDVL2.bmp	TZIDVL2.bmp | ||||
| 3	43	TBINUP_6.def	TOIDVL2.bmp	TZIDVL2.bmp | ||||
| 4	16	TBNCBLAK.def	TONSMITA.bmp	TZNSMITA.bmp | ||||
| 4	20	TBNCBOAT.def	TONSHPNA.bmp	TZNSHPNA.bmp | ||||
| 4	8	TBNCCAS2.def	TONCAS2.bmp	TZNCAS2.bmp | ||||
| 4	9	TBNCCAS3.def	TONCAS3.bmp	TZNCAS3.bmp | ||||
| 4	7	TBNCCSTL.def	TONCAS1.bmp	TZNCAS1.bmp | ||||
| 4	6	TBNCDOCK.def	TONSHPBA.bmp	TZNSHPBA.bmp | ||||
| 4	30	TBNCDW0_.def	TONSKEL1.bmp	TZNSKEL1.bmp | ||||
| 4	31	TBNCDW_1.def	TONZOMB1.bmp	TZNZOMB1.bmp | ||||
| 4	32	TBNCDW_2.def	TONWIGH1.bmp	TZNWIGH1.bmp | ||||
| 4	33	TBNCDW_3.def	TONVAM1.bmp	TZNVAM1.bmp | ||||
| 4	34	TBNCDW_4.def	TONLICH1.bmp	TZNLICH1.bmp | ||||
| 4	35	TBNCDW_5.def	TONBKN1.bmp	TZNBKN1.bmp | ||||
| 4	36	TBNCDW_6.def	TONBON1.bmp	TZNBON1.bmp | ||||
| 4	21	TBNCEXT0.def	TONNECRA.bmp	TZNNECRA.bmp | ||||
| 4	22	TBNCEXT1.def	TONSKELT.bmp	TZNSKELT.bmp | ||||
| 4	11	TBNCHAL2.def	TONHAL2.bmp	TZNHAL2.bmp | ||||
| 4	12	TBNCHAL3.def	TONHAL3.bmp	TZNHAL3.bmp | ||||
| 4	13	TBNCHAL4.def	TONHAL4.bmp	TZNHAL4.bmp | ||||
| 4	10	TBNCHALL.def	TONHAL1.bmp	TZNHAL1.bmp | ||||
| 4	26	TBNCHOLY.def	TONHOLYA.bmp	TZNHOLYA.bmp | ||||
| 4	18	TBNCHRD1.def	TONSKE1H.bmp	TZNSKE1H.bmp | ||||
| 4	19	TBNCHRD2.def	TONSKE2H.bmp	TZNSKE2H.bmp | ||||
| 4	1	TBNCMAG2.def	TONMAG2.bmp	TZNMAG2.bmp | ||||
| 4	2	TBNCMAG3.def	TONMAG3.bmp	TZNMAG3.bmp | ||||
| 4	3	TBNCMAG4.def	TONMAG4.bmp	TZNMAG4.bmp | ||||
| 4	4	TBNCMAG5.def	TONMAG5.bmp	TZNMAG5.bmp | ||||
| 4	0	TBNCMAGE.def	TONMAG1.bmp	TZNMAG1.bmp | ||||
| 4	14	TBNCMARK.def	TONMRK1.bmp	TZNMRK1.bmp | ||||
| 4	15	TBNCSILO.def	TONMRK2.bmp	TZNMRK2.bmp | ||||
| 4	17	TBNCSPEC.def	TONSHRDA.bmp	TZNSHRDA.bmp | ||||
| 4	5	TBNCTVRN.def	TONTAV.bmp	TZNTAV.bmp | ||||
| 4	37	TBNCUP0_.def	TONSKEL2.bmp	TZNSKEL2.bmp | ||||
| 4	38	TBNCUP_1.def	TONZOMB2.bmp	TZNZOMB2.bmp | ||||
| 4	39	TBNCUP_2.def	TONWIGH2.bmp	TZNWIGH2.bmp | ||||
| 4	40	TBNCUP_3.def	TONVAM2.bmp	TZNVAM2.bmp | ||||
| 4	41	TBNCUP_4.def	TONLICH2.bmp	TZNLICH2.bmp | ||||
| 4	42	TBNCUP_5.def	TONBKN2.bmp	TZNBKN2.bmp | ||||
| 4	43	TBNCUP_6.def	TONBON2.bmp	TZNBON2.bmp | ||||
| @@ -65,4 +65,10 @@ GROUP | ||||
| 39 | ||||
| 24 | ||||
| 25 | ||||
| CASTLE 4 | ||||
| GROUP | ||||
| 30 | ||||
| 37 | ||||
| 18 | ||||
| 19 | ||||
| EOD | ||||
| @@ -500,7 +500,7 @@ unsigned int CHeroHandler::level(unsigned int experience) | ||||
| 	while(experience>=expPerLevel[expPerLevel.size()-1]) | ||||
| 	{ | ||||
| 		experience/=1.2; | ||||
| 		add+1; | ||||
| 		add+=1; | ||||
| 	} | ||||
| 	for(int i=expPerLevel.size()-1; i>=0; --i) | ||||
| 	{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user