mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
* VCMI won't crash when r-click neutral stack during the battle
* water won't blink behind shipyard in the Castle * in the townlist in castle selected town will by placed on the 2nd place (not 3rd) * fixed memory leaks * properly displaying two-hex creatures in recruit/split/info window * minor improvements
This commit is contained in:
@@ -904,11 +904,13 @@ void CBattleHex::clickRight(boost::logic::tribool down)
|
|||||||
{
|
{
|
||||||
pom = new StackState();
|
pom = new StackState();
|
||||||
const CGHeroInstance *h = myst.owner == myInterface->attackingHeroInstance->tempOwner ? myInterface->attackingHeroInstance : myInterface->defendingHeroInstance;
|
const CGHeroInstance *h = myst.owner == myInterface->attackingHeroInstance->tempOwner ? myInterface->attackingHeroInstance : myInterface->defendingHeroInstance;
|
||||||
|
if(h)
|
||||||
|
{
|
||||||
pom->attackBonus = h->primSkills[0];
|
pom->attackBonus = h->primSkills[0];
|
||||||
pom->defenseBonus = h->primSkills[1];
|
pom->defenseBonus = h->primSkills[1];
|
||||||
pom->luck = h->getCurrentLuck();
|
pom->luck = h->getCurrentLuck();
|
||||||
pom->morale = h->getCurrentMorale();
|
pom->morale = h->getCurrentMorale();
|
||||||
|
}
|
||||||
(new CCreInfoWindow(myst.creature->idNumber,0,pom,boost::function<void()>(),boost::function<void()>()))
|
(new CCreInfoWindow(myst.creature->idNumber,0,pom,boost::function<void()>(),boost::function<void()>()))
|
||||||
->activate();
|
->activate();
|
||||||
}
|
}
|
||||||
|
@@ -232,7 +232,7 @@ CCastleInterface::CCastleInterface(const CGTownInstance * Town, bool Activate)
|
|||||||
townlist->genList();
|
townlist->genList();
|
||||||
townlist->selected = getIndexOf(townlist->items,Town);
|
townlist->selected = getIndexOf(townlist->items,Town);
|
||||||
if((townlist->selected+1) > townlist->SIZE)
|
if((townlist->selected+1) > townlist->SIZE)
|
||||||
townlist->from = townlist->selected - townlist->SIZE + 1;
|
townlist->from = townlist->selected - townlist->SIZE + 2;
|
||||||
|
|
||||||
CSDL_Ext::blueToPlayersAdv(townInt,LOCPLINT->playerID);
|
CSDL_Ext::blueToPlayersAdv(townInt,LOCPLINT->playerID);
|
||||||
exit->bitmapOffset = 4;
|
exit->bitmapOffset = 4;
|
||||||
@@ -343,7 +343,7 @@ void CCastleInterface::buildingClicked(int building)
|
|||||||
|
|
||||||
crs.push_back(std::make_pair(town->town->basicCreatures[building-30],amount));
|
crs.push_back(std::make_pair(town->town->basicCreatures[building-30],amount));
|
||||||
|
|
||||||
CRecrutationWindow *rw = new CRecrutationWindow(crs,this);
|
CRecrutationWindow *rw = new CRecrutationWindow(crs,boost::bind(&CCallback::recruitCreatures,LOCPLINT->cb,town,_1,_2));
|
||||||
rw->activate();
|
rw->activate();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -468,7 +468,7 @@ void CCastleInterface::show(SDL_Surface * to)
|
|||||||
//blit buildings
|
//blit buildings
|
||||||
for(int i=0;i<buildings.size();i++)
|
for(int i=0;i<buildings.size();i++)
|
||||||
{
|
{
|
||||||
int frame = (animval)%(buildings[i]->max - buildings[i]->offset);
|
int frame = ((animval)%(buildings[i]->max - buildings[i]->offset)) + buildings[i]->offset;
|
||||||
if(frame)
|
if(frame)
|
||||||
{
|
{
|
||||||
blitAt(buildings[i]->def->ourImages[0].bitmap,buildings[i]->pos.x,buildings[i]->pos.y,to);
|
blitAt(buildings[i]->def->ourImages[0].bitmap,buildings[i]->pos.x,buildings[i]->pos.y,to);
|
||||||
@@ -606,10 +606,29 @@ void CCastleInterface::recreateBuildings()
|
|||||||
vortex->max = 10;
|
vortex->max = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//code for the shipyard in the Castle
|
||||||
void CCastleInterface::recruit(int ID, int amount)
|
else if((town->subID == 0) && (town->builtBuildings.find(6)!=town->builtBuildings.end()))
|
||||||
{
|
{
|
||||||
LOCPLINT->cb->recruitCreatures(town,ID,amount);
|
CBuildingRect *shipyard = NULL;
|
||||||
|
for(int i=0;i<buildings.size();i++)
|
||||||
|
{
|
||||||
|
if(buildings[i]->str->ID==6)
|
||||||
|
{
|
||||||
|
shipyard=buildings[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(town->builtBuildings.find(8)!=town->builtBuildings.end()) //there is citadel
|
||||||
|
{
|
||||||
|
shipyard->offset = 1;
|
||||||
|
shipyard->max = shipyard->def->ourImages.size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
shipyard->offset = 0;
|
||||||
|
shipyard->max = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void CHallInterface::CResDataBar::show(SDL_Surface * to)
|
void CHallInterface::CResDataBar::show(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
|
@@ -28,7 +28,7 @@ public:
|
|||||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CCastleInterface : public IShowable, public IActivable, public IRecruit
|
class CCastleInterface : public IShowable, public IActivable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
bool showing;
|
bool showing;
|
||||||
@@ -64,7 +64,6 @@ public:
|
|||||||
void addBuilding(int bid);
|
void addBuilding(int bid);
|
||||||
void removeBuilding(int bid);
|
void removeBuilding(int bid);
|
||||||
void recreateBuildings();
|
void recreateBuildings();
|
||||||
void recruit(int ID, int amount);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CHallInterface : public IShowable, public IActivable
|
class CHallInterface : public IShowable, public IActivable
|
||||||
|
@@ -35,6 +35,7 @@ struct BattleAction
|
|||||||
|
|
||||||
struct StackState
|
struct StackState
|
||||||
{
|
{
|
||||||
|
StackState(){attackBonus=defenseBonus=healthBonus=speedBonus=morale=luck=shotsLeft=currentHealth=0;};
|
||||||
int attackBonus, defenseBonus, healthBonus, speedBonus;
|
int attackBonus, defenseBonus, healthBonus, speedBonus;
|
||||||
int currentHealth;
|
int currentHealth;
|
||||||
int shotsLeft;
|
int shotsLeft;
|
||||||
|
@@ -2662,6 +2662,28 @@ void CTownList::draw()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CCreaturePic::CCreaturePic(CCreature *cre)
|
||||||
|
:c(cre)
|
||||||
|
{
|
||||||
|
anim = new CCreatureAnimation(cre->animDefName);
|
||||||
|
}
|
||||||
|
CCreaturePic::~CCreaturePic()
|
||||||
|
{
|
||||||
|
delete anim;
|
||||||
|
}
|
||||||
|
int CCreaturePic::blitPic(SDL_Surface *to, int x, int y, bool nextFrame)
|
||||||
|
{
|
||||||
|
blitAt(CGI->creh->backgrounds[c->faction],x,y);//curx-50,pos.y+130-65);
|
||||||
|
SDL_Rect dst = genRect(130,100,x,y);
|
||||||
|
if(c->isDoubleWide())
|
||||||
|
x-=15;
|
||||||
|
return anim->nextFrameMiddle(to,x+70,y+45,true,nextFrame,false,&dst);
|
||||||
|
}
|
||||||
|
SDL_Surface * CCreaturePic::getPic(bool nextFrame)
|
||||||
|
{
|
||||||
|
//TODO: write
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
void CRecrutationWindow::close()
|
void CRecrutationWindow::close()
|
||||||
{
|
{
|
||||||
deactivate();
|
deactivate();
|
||||||
@@ -2677,7 +2699,7 @@ void CRecrutationWindow::Max()
|
|||||||
}
|
}
|
||||||
void CRecrutationWindow::Buy()
|
void CRecrutationWindow::Buy()
|
||||||
{
|
{
|
||||||
rec->recruit(creatures[which].ID,slider->value);
|
recruit(creatures[which].ID,slider->value);
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
void CRecrutationWindow::Cancel()
|
void CRecrutationWindow::Cancel()
|
||||||
@@ -2762,15 +2784,13 @@ void CRecrutationWindow::show(SDL_Surface * to)
|
|||||||
curx = pos.x + 192 + 102 - (102*creatures.size()/2) - (18*(creatures.size()-1)/2);
|
curx = pos.x + 192 + 102 - (102*creatures.size()/2) - (18*(creatures.size()-1)/2);
|
||||||
for(int i=0;i<creatures.size();i++)
|
for(int i=0;i<creatures.size();i++)
|
||||||
{
|
{
|
||||||
blitAt(CGI->creh->backgrounds[CGI->creh->creatures[creatures[i].ID].faction],curx-50,pos.y+130-65);
|
creatures[i].pic->blitPic(screen,curx-50,pos.y+130-65,!(c%2));
|
||||||
SDL_Rect dst = genRect(130,100,curx-50,pos.y+130-65);
|
|
||||||
creatures[i].anim->nextFrameMiddle(screen,curx+20,pos.y+110,true,!(c%2),false,&dst);
|
|
||||||
curx += 120;
|
curx += 120;
|
||||||
}
|
}
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
CRecrutationWindow::CRecrutationWindow(std::vector<std::pair<int,int> > &Creatures, IRecruit *irec) //creatures - pairs<creature_ID,amount>
|
CRecrutationWindow::CRecrutationWindow(const std::vector<std::pair<int,int> > &Creatures, const boost::function<void(int,int)> &Recruit) //creatures - pairs<creature_ID,amount>
|
||||||
:rec(irec)
|
:recruit(Recruit)
|
||||||
{
|
{
|
||||||
which = 0;
|
which = 0;
|
||||||
creatures.resize(Creatures.size());
|
creatures.resize(Creatures.size());
|
||||||
@@ -2782,7 +2802,7 @@ CRecrutationWindow::CRecrutationWindow(std::vector<std::pair<int,int> > &Creatur
|
|||||||
for(int j=0;j<CGI->creh->creatures[Creatures[i].first].cost.size();j++)
|
for(int j=0;j<CGI->creh->creatures[Creatures[i].first].cost.size();j++)
|
||||||
if(CGI->creh->creatures[Creatures[i].first].cost[j])
|
if(CGI->creh->creatures[Creatures[i].first].cost[j])
|
||||||
creatures[i].res.push_back(std::make_pair(j,CGI->creh->creatures[Creatures[i].first].cost[j]));
|
creatures[i].res.push_back(std::make_pair(j,CGI->creh->creatures[Creatures[i].first].cost[j]));
|
||||||
creatures[i].anim = new CCreatureAnimation(CGI->creh->creatures[Creatures[i].first].animDefName);
|
creatures[i].pic = new CCreaturePic(&CGI->creh->creatures[Creatures[i].first]);
|
||||||
amounts[i] = CGI->creh->creatures[Creatures[i].first].maxAmount(LOCPLINT->cb->getResourceAmount());
|
amounts[i] = CGI->creh->creatures[Creatures[i].first].maxAmount(LOCPLINT->cb->getResourceAmount());
|
||||||
}
|
}
|
||||||
SDL_Surface *hhlp = CGI->bitmaph->loadBitmap("TPRCRT.bmp");
|
SDL_Surface *hhlp = CGI->bitmaph->loadBitmap("TPRCRT.bmp");
|
||||||
@@ -2832,6 +2852,13 @@ CRecrutationWindow::CRecrutationWindow(std::vector<std::pair<int,int> > &Creatur
|
|||||||
}//(int x, int y, int totalw, T*Owner,void(T::*Moved)(int to), int Capacity, int Amount, int Value, bool Horizontal)
|
}//(int x, int y, int totalw, T*Owner,void(T::*Moved)(int to), int Capacity, int Amount, int Value, bool Horizontal)
|
||||||
CRecrutationWindow::~CRecrutationWindow()
|
CRecrutationWindow::~CRecrutationWindow()
|
||||||
{
|
{
|
||||||
|
for(int i=0;i<creatures.size();i++)
|
||||||
|
{
|
||||||
|
delete creatures[i].pic;
|
||||||
|
}
|
||||||
|
delete max;
|
||||||
|
delete buy;
|
||||||
|
delete cancel;
|
||||||
SDL_FreeSurface(bitmap);
|
SDL_FreeSurface(bitmap);
|
||||||
delete slider;
|
delete slider;
|
||||||
}
|
}
|
||||||
@@ -2852,8 +2879,8 @@ CSplitWindow::CSplitWindow(int cid, int max, CGarrisonInt *Owner)
|
|||||||
slider = new CSlider(pos.x+21,pos.y+194,257,boost::bind(&CSplitWindow::sliderMoved,this,_1),1,max,0,true);
|
slider = new CSlider(pos.x+21,pos.y+194,257,boost::bind(&CSplitWindow::sliderMoved,this,_1),1,max,0,true);
|
||||||
a1 = max;
|
a1 = max;
|
||||||
a2 = 0;
|
a2 = 0;
|
||||||
anim = new CCreatureAnimation(CGI->creh->creatures[cid].animDefName);
|
anim = new CCreaturePic(&CGI->creh->creatures[cid]);
|
||||||
anim->setType(1);
|
anim->anim->setType(1);
|
||||||
|
|
||||||
std::string title = CGI->generaltexth->allTexts[256];
|
std::string title = CGI->generaltexth->allTexts[256];
|
||||||
boost::algorithm::replace_first(title,"%s",CGI->creh->creatures[cid].namePl);
|
boost::algorithm::replace_first(title,"%s",CGI->creh->creatures[cid].namePl);
|
||||||
@@ -2862,6 +2889,10 @@ CSplitWindow::CSplitWindow(int cid, int max, CGarrisonInt *Owner)
|
|||||||
CSplitWindow::~CSplitWindow()
|
CSplitWindow::~CSplitWindow()
|
||||||
{
|
{
|
||||||
SDL_FreeSurface(bitmap);
|
SDL_FreeSurface(bitmap);
|
||||||
|
delete ok;
|
||||||
|
delete cancel;
|
||||||
|
delete slider;
|
||||||
|
delete anim;
|
||||||
}
|
}
|
||||||
void CSplitWindow::activate()
|
void CSplitWindow::activate()
|
||||||
{
|
{
|
||||||
@@ -2910,27 +2941,20 @@ void CSplitWindow::show(SDL_Surface * to)
|
|||||||
printAtMiddle(pom,pos.x+70,pos.y+237,GEOR16,zwykly,screen);
|
printAtMiddle(pom,pos.x+70,pos.y+237,GEOR16,zwykly,screen);
|
||||||
itoa(a2,pom,10);
|
itoa(a2,pom,10);
|
||||||
printAtMiddle(pom,pos.x+233,pos.y+237,GEOR16,zwykly,screen);
|
printAtMiddle(pom,pos.x+233,pos.y+237,GEOR16,zwykly,screen);
|
||||||
|
anim->blitPic(screen,pos.x+20,pos.y+54,false);
|
||||||
|
anim->blitPic(screen,pos.x+177,pos.y+54,false);
|
||||||
blitAt(CGI->creh->backgrounds[CGI->creh->creatures[c].faction],pos.x+20,pos.y+54);
|
|
||||||
anim->nextFrameMiddle(screen,pos.x+20+70,pos.y+54+55,true,false,false);
|
|
||||||
|
|
||||||
blitAt(CGI->creh->backgrounds[CGI->creh->creatures[c].faction],pos.x+177,pos.y+54);
|
|
||||||
anim->nextFrameMiddle(screen,pos.x+177+70,pos.y+54+55,true,false,false);
|
|
||||||
}
|
}
|
||||||
void CSplitWindow::keyPressed (SDL_KeyboardEvent & key)
|
void CSplitWindow::keyPressed (SDL_KeyboardEvent & key)
|
||||||
{
|
{
|
||||||
//TODO: zeby sie dalo recznie wpisywac
|
//TODO: make manual typing possible
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void CCreInfoWindow::show(SDL_Surface * to)
|
void CCreInfoWindow::show(SDL_Surface * to)
|
||||||
{
|
{
|
||||||
char pom[15];
|
char pom[15];
|
||||||
blitAt(bitmap,pos.x,pos.y,screen);
|
blitAt(bitmap,pos.x,pos.y,screen);
|
||||||
blitAt(CGI->creh->backgrounds[c->faction],pos.x+21,pos.y+48,screen);
|
anim->blitPic(screen,pos.x+21,pos.y+48,(type) && anf);
|
||||||
anim->nextFrameMiddle(screen,pos.x+90,pos.y+95,true,false,false);
|
anf=!anf;
|
||||||
if(upgrade)
|
if(upgrade)
|
||||||
upgrade->show();
|
upgrade->show();
|
||||||
if(dismiss)
|
if(dismiss)
|
||||||
@@ -2951,8 +2975,8 @@ CCreInfoWindow::CCreInfoWindow
|
|||||||
pos.h = bitmap->h;
|
pos.h = bitmap->h;
|
||||||
blueToPlayersAdv(bitmap,LOCPLINT->playerID);
|
blueToPlayersAdv(bitmap,LOCPLINT->playerID);
|
||||||
SDL_SetColorKey(bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(bitmap->format,0,255,255));
|
SDL_SetColorKey(bitmap,SDL_SRCCOLORKEY,SDL_MapRGB(bitmap->format,0,255,255));
|
||||||
anim = new CCreatureAnimation(c->animDefName);
|
anim = new CCreaturePic(c);
|
||||||
anim->setType(1);
|
if(!type) anim->anim->setType(1);
|
||||||
|
|
||||||
char pom[25];int hlp=0;
|
char pom[25];int hlp=0;
|
||||||
printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap); //creature name
|
printAtMiddle(c->namePl,149,30,GEOR13,zwykly,bitmap); //creature name
|
||||||
@@ -3034,9 +3058,13 @@ CCreInfoWindow::~CCreInfoWindow()
|
|||||||
{
|
{
|
||||||
SDL_FreeSurface(bitmap);
|
SDL_FreeSurface(bitmap);
|
||||||
delete anim;
|
delete anim;
|
||||||
|
delete upgrade;
|
||||||
|
delete ok;
|
||||||
|
delete dismiss;
|
||||||
}
|
}
|
||||||
void CCreInfoWindow::activate()
|
void CCreInfoWindow::activate()
|
||||||
{
|
{
|
||||||
|
if(!type)
|
||||||
ClickableR::activate();
|
ClickableR::activate();
|
||||||
LOCPLINT->objsToBlit.push_back(this);
|
LOCPLINT->objsToBlit.push_back(this);
|
||||||
if(ok)
|
if(ok)
|
||||||
@@ -3074,6 +3102,7 @@ void CCreInfoWindow::keyPressed (SDL_KeyboardEvent & key)
|
|||||||
}
|
}
|
||||||
void CCreInfoWindow::deactivate()
|
void CCreInfoWindow::deactivate()
|
||||||
{
|
{
|
||||||
|
if(!type)
|
||||||
ClickableR::deactivate();
|
ClickableR::deactivate();
|
||||||
LOCPLINT->objsToBlit.erase(std::find(LOCPLINT->objsToBlit.begin(),LOCPLINT->objsToBlit.end(),this));
|
LOCPLINT->objsToBlit.erase(std::find(LOCPLINT->objsToBlit.begin(),LOCPLINT->objsToBlit.end(),this));
|
||||||
if(ok)
|
if(ok)
|
||||||
|
@@ -449,10 +449,15 @@ public:
|
|||||||
void draw();
|
void draw();
|
||||||
};
|
};
|
||||||
|
|
||||||
class IRecruit
|
class CCreaturePic //draws 100x130 picture with creature on background, use nextFrame=true to get animation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void recruit(int ID, int amount)=0;
|
CCreature *c;
|
||||||
|
CCreatureAnimation *anim;
|
||||||
|
CCreaturePic(CCreature *cre);
|
||||||
|
~CCreaturePic();
|
||||||
|
int blitPic(SDL_Surface *to, int x, int y, bool nextFrame);
|
||||||
|
SDL_Surface * getPic(bool nextFrame);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CRecrutationWindow : public IShowable, public ClickableL
|
class CRecrutationWindow : public IShowable, public ClickableL
|
||||||
@@ -461,13 +466,13 @@ public:
|
|||||||
struct creinfo
|
struct creinfo
|
||||||
{
|
{
|
||||||
SDL_Rect pos;
|
SDL_Rect pos;
|
||||||
|
CCreaturePic *pic;
|
||||||
int ID, amount; //creature ID and available amount
|
int ID, amount; //creature ID and available amount
|
||||||
CCreatureAnimation *anim;
|
|
||||||
std::vector<std::pair<int,int> > res; //res_id - cost_per_unit
|
std::vector<std::pair<int,int> > res; //res_id - cost_per_unit
|
||||||
};
|
};
|
||||||
std::vector<int> amounts; //how many creatures we can afford
|
std::vector<int> amounts; //how many creatures we can afford
|
||||||
std::vector<creinfo> creatures;
|
std::vector<creinfo> creatures;
|
||||||
IRecruit *rec;
|
boost::function<void(int,int)> recruit; //void (int ID, int amount) <-- call to recruit creatures
|
||||||
CSlider *slider;
|
CSlider *slider;
|
||||||
AdventureMapButton *max, *buy, *cancel;
|
AdventureMapButton *max, *buy, *cancel;
|
||||||
SDL_Surface *bitmap;
|
SDL_Surface *bitmap;
|
||||||
@@ -482,7 +487,7 @@ public:
|
|||||||
void activate();
|
void activate();
|
||||||
void deactivate();
|
void deactivate();
|
||||||
void show(SDL_Surface * to = NULL);
|
void show(SDL_Surface * to = NULL);
|
||||||
CRecrutationWindow(std::vector<std::pair<int,int> > & Creatures, IRecruit *irec); //creatures - pairs<creature_ID,amount>
|
CRecrutationWindow(const std::vector<std::pair<int,int> > & Creatures, const boost::function<void(int,int)> & Recruit); //creatures - pairs<creature_ID,amount>
|
||||||
~CRecrutationWindow();
|
~CRecrutationWindow();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -491,7 +496,7 @@ class CSplitWindow : public IShowable, public KeyInterested
|
|||||||
public:
|
public:
|
||||||
CGarrisonInt *gar;
|
CGarrisonInt *gar;
|
||||||
CSlider *slider;
|
CSlider *slider;
|
||||||
CCreatureAnimation *anim;
|
CCreaturePic *anim;
|
||||||
AdventureMapButton *ok, *cancel;
|
AdventureMapButton *ok, *cancel;
|
||||||
SDL_Surface *bitmap;
|
SDL_Surface *bitmap;
|
||||||
int a1, a2, c;
|
int a1, a2, c;
|
||||||
@@ -513,9 +518,10 @@ class CCreInfoWindow : public IShowable, public KeyInterested, public ClickableR
|
|||||||
public:
|
public:
|
||||||
int type;//0 - rclick popup; 1 - normal window
|
int type;//0 - rclick popup; 1 - normal window
|
||||||
SDL_Surface *bitmap;
|
SDL_Surface *bitmap;
|
||||||
|
bool anf;
|
||||||
|
|
||||||
boost::function<void()> dsm;
|
boost::function<void()> dsm;
|
||||||
CCreatureAnimation *anim;
|
CCreaturePic *anim;
|
||||||
CCreature *c;
|
CCreature *c;
|
||||||
|
|
||||||
AdventureMapButton *dismiss, *upgrade, *ok;
|
AdventureMapButton *dismiss, *upgrade, *ok;
|
||||||
|
Reference in New Issue
Block a user