mirror of
https://github.com/vcmi/vcmi.git
synced 2025-09-16 09:26:28 +02:00
* partially done attacking in battles
* screen isn't now refreshed while blitting creature info window * r-click creature info windows in battles * a few minor things
This commit is contained in:
@@ -266,8 +266,6 @@ void CBattleInterface::show(SDL_Surface * to)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//units shown
|
//units shown
|
||||||
|
|
||||||
CSDL_Ext::update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CBattleInterface::reverseCreature(int number, int hex, bool wideTrick)
|
bool CBattleInterface::reverseCreature(int number, int hex, bool wideTrick)
|
||||||
@@ -278,6 +276,7 @@ bool CBattleInterface::reverseCreature(int number, int hex, bool wideTrick)
|
|||||||
for(int g=0; g<creAnims[number]->framesInGroup(8); ++g)
|
for(int g=0; g<creAnims[number]->framesInGroup(8); ++g)
|
||||||
{
|
{
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
creDir[number] = !creDir[number];
|
creDir[number] = !creDir[number];
|
||||||
@@ -296,6 +295,7 @@ bool CBattleInterface::reverseCreature(int number, int hex, bool wideTrick)
|
|||||||
for(int g=0; g<creAnims[number]->framesInGroup(7); ++g)
|
for(int g=0; g<creAnims[number]->framesInGroup(7); ++g)
|
||||||
{
|
{
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
creAnims[number]->setType(2);
|
creAnims[number]->setType(2);
|
||||||
@@ -379,6 +379,7 @@ void CBattleInterface::stackMoved(int number, int destHex, bool startMoving, boo
|
|||||||
for(int i=0; i<creAnims[number]->framesInGroup(20); ++i)
|
for(int i=0; i<creAnims[number]->framesInGroup(20); ++i)
|
||||||
{
|
{
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -445,6 +446,7 @@ void CBattleInterface::stackMoved(int number, int destHex, bool startMoving, boo
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
if( (LOCPLINT->cb->battleGetStackByID(number).owner == attackingHeroInstance->tempOwner ) != creDir[number])
|
if( (LOCPLINT->cb->battleGetStackByID(number).owner == attackingHeroInstance->tempOwner ) != creDir[number])
|
||||||
@@ -512,6 +514,7 @@ void CBattleInterface::stackMoved(int number, int destHex, bool startMoving, boo
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -521,6 +524,7 @@ void CBattleInterface::stackMoved(int number, int destHex, bool startMoving, boo
|
|||||||
for(int i=0; i<creAnims[number]->framesInGroup(21); ++i)
|
for(int i=0; i<creAnims[number]->framesInGroup(21); ++i)
|
||||||
{
|
{
|
||||||
show();
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -539,8 +543,147 @@ void CBattleInterface::stackMoved(int number, int destHex, bool startMoving, boo
|
|||||||
creAnims[number]->pos.y = coords.second;
|
creAnims[number]->pos.y = coords.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBattleInterface::stackIsAttacked(int ID)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void CBattleInterface::stackAttacking(int ID, int dest)
|
void CBattleInterface::stackAttacking(int ID, int dest)
|
||||||
{
|
{
|
||||||
|
CStack aStack = LOCPLINT->cb->battleGetStackByID(ID); //attacking stack
|
||||||
|
if(aStack.creature->isDoubleWide())
|
||||||
|
{
|
||||||
|
switch(CBattleHex::mutualPosition(aStack.position, dest)) //attack direction
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
/*reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(10);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(10); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);*/
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
creAnims[ID]->setType(10);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(10); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
creAnims[ID]->setType(11);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(11); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
creAnims[ID]->setType(12);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(12); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
/*reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(12);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(12); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);*/
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
/*reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(11);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(11); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);*/
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
creAnims[ID]->setType(2);
|
||||||
|
}
|
||||||
|
else //else for if(aStack.creature->isDoubleWide())
|
||||||
|
{
|
||||||
|
switch(CBattleHex::mutualPosition(aStack.position, dest)) //attack direction
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(10);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(10); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
creAnims[ID]->setType(10);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(10); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
creAnims[ID]->setType(11);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(11); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
creAnims[ID]->setType(12);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(12); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(12);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(12); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
creAnims[ID]->setType(11);
|
||||||
|
for(int i=0; i<creAnims[ID]->framesInGroup(11); ++i)
|
||||||
|
{
|
||||||
|
show();
|
||||||
|
CSDL_Ext::update();
|
||||||
|
SDL_framerateDelay(LOCPLINT->mainFPSmng);
|
||||||
|
}
|
||||||
|
reverseCreature(ID, aStack.position, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
creAnims[ID]->setType(2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleInterface::newRound(int number)
|
void CBattleInterface::newRound(int number)
|
||||||
@@ -552,11 +695,24 @@ void CBattleInterface::hexLclicked(int whichOne)
|
|||||||
{
|
{
|
||||||
if((whichOne%17)!=0 && (whichOne%17)!=16) //if player is trying to attack enemey unit or move creature stack
|
if((whichOne%17)!=0 && (whichOne%17)!=16) //if player is trying to attack enemey unit or move creature stack
|
||||||
{
|
{
|
||||||
BattleAction * ba = new BattleAction(); //to be deleted by engine
|
int atCre = LOCPLINT->cb->battleGetStack(whichOne); //creature at destination tile; -1 if there is no one
|
||||||
ba->actionType = 6;
|
//LOCPLINT->cb->battleGetCreature();
|
||||||
ba->destinationTile = whichOne;
|
if(atCre==-1) //normal move action
|
||||||
ba->stackNumber = activeStack;
|
{
|
||||||
givenCommand = ba;
|
BattleAction * ba = new BattleAction(); //to be deleted by engine
|
||||||
|
ba->actionType = 2;
|
||||||
|
ba->destinationTile = whichOne;
|
||||||
|
ba->stackNumber = activeStack;
|
||||||
|
givenCommand = ba;
|
||||||
|
}
|
||||||
|
else if(LOCPLINT->cb->battleGetStackByID(atCre).owner != attackingHeroInstance->tempOwner) //attacking
|
||||||
|
{
|
||||||
|
BattleAction * ba = new BattleAction(); //to be deleted by engine
|
||||||
|
ba->actionType = 6;
|
||||||
|
ba->destinationTile = whichOne;
|
||||||
|
ba->stackNumber = activeStack;
|
||||||
|
givenCommand = ba;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -689,6 +845,7 @@ void CBattleHex::activate()
|
|||||||
Hoverable::activate();
|
Hoverable::activate();
|
||||||
MotionInterested::activate();
|
MotionInterested::activate();
|
||||||
ClickableL::activate();
|
ClickableL::activate();
|
||||||
|
ClickableR::activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleHex::deactivate()
|
void CBattleHex::deactivate()
|
||||||
@@ -696,6 +853,7 @@ void CBattleHex::deactivate()
|
|||||||
Hoverable::deactivate();
|
Hoverable::deactivate();
|
||||||
MotionInterested::deactivate();
|
MotionInterested::deactivate();
|
||||||
ClickableL::deactivate();
|
ClickableL::deactivate();
|
||||||
|
ClickableR::deactivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBattleHex::hover(bool on)
|
void CBattleHex::hover(bool on)
|
||||||
@@ -731,6 +889,29 @@ void CBattleHex::clickLeft(boost::logic::tribool down)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CBattleHex::clickRight(boost::logic::tribool down)
|
||||||
|
{
|
||||||
|
int stID = LOCPLINT->cb->battleGetStack(myNumber); //id of stack being on this tile
|
||||||
|
if(hovered && strictHovered && stID!=-1)
|
||||||
|
{
|
||||||
|
CStack myst = LOCPLINT->cb->battleGetStackByID(stID); //stack info
|
||||||
|
StackState *pom = NULL;
|
||||||
|
if(down)
|
||||||
|
{
|
||||||
|
pom = new StackState();
|
||||||
|
const CGHeroInstance *h = myst.owner == myInterface->attackingHeroInstance->tempOwner ? myInterface->attackingHeroInstance : myInterface->defendingHeroInstance;
|
||||||
|
pom->attackBonus = h->primSkills[0];
|
||||||
|
pom->defenseBonus = h->primSkills[1];
|
||||||
|
pom->luck = h->getCurrentLuck();
|
||||||
|
pom->morale = h->getCurrentMorale();
|
||||||
|
|
||||||
|
(new CCreInfoWindow(myst.creature->idNumber,0,pom,boost::function<void()>(),boost::function<void()>()))
|
||||||
|
->activate();
|
||||||
|
}
|
||||||
|
delete pom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CBattleConsole::CBattleConsole() : lastShown(-1)
|
CBattleConsole::CBattleConsole() : lastShown(-1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,7 @@ public:
|
|||||||
|
|
||||||
class CBattleInterface;
|
class CBattleInterface;
|
||||||
|
|
||||||
class CBattleHex : public Hoverable, public MotionInterested, public ClickableL
|
class CBattleHex : public Hoverable, public MotionInterested, public ClickableL, public ClickableR
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
unsigned int myNumber;
|
unsigned int myNumber;
|
||||||
@@ -40,6 +40,7 @@ public:
|
|||||||
void deactivate();
|
void deactivate();
|
||||||
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
void mouseMoved (SDL_MouseMotionEvent & sEvent);
|
||||||
void clickLeft(boost::logic::tribool down);
|
void clickLeft(boost::logic::tribool down);
|
||||||
|
void clickRight(boost::logic::tribool down);
|
||||||
CBattleHex();
|
CBattleHex();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -113,7 +114,10 @@ public:
|
|||||||
void stackRemoved(CStack stack); //stack disappeared from batlefiled
|
void stackRemoved(CStack stack); //stack disappeared from batlefiled
|
||||||
void stackActivated(int number); //active stack has been changed
|
void stackActivated(int number); //active stack has been changed
|
||||||
void stackMoved(int number, int destHex, bool startMoving, bool endMoving); //stack with id number moved to destHex
|
void stackMoved(int number, int destHex, bool startMoving, bool endMoving); //stack with id number moved to destHex
|
||||||
|
void stackIsAttacked(int ID); //called when stack id attacked
|
||||||
void stackAttacking(int ID, int dest); //called when stack with id ID is attacking something on hex dest
|
void stackAttacking(int ID, int dest); //called when stack with id ID is attacking something on hex dest
|
||||||
void newRound(int number); //caled when round is ended; number is the number of round
|
void newRound(int number); //caled when round is ended; number is the number of round
|
||||||
void hexLclicked(int whichOne); //hex only call-in
|
void hexLclicked(int whichOne); //hex only call-in
|
||||||
|
|
||||||
|
friend CBattleHex;
|
||||||
};
|
};
|
||||||
|
@@ -215,6 +215,10 @@ void CGameState::battle(CCreatureSet * army1, CCreatureSet * army2, int3 tile, C
|
|||||||
BattleAction ba = ((CPlayerInterface*)CGI->playerint[serialOwner])->activeStack(stacks[i]->ID);
|
BattleAction ba = ((CPlayerInterface*)CGI->playerint[serialOwner])->activeStack(stacks[i]->ID);
|
||||||
switch(ba.actionType)
|
switch(ba.actionType)
|
||||||
{
|
{
|
||||||
|
case 2: //walk
|
||||||
|
{
|
||||||
|
battleMoveCreatureStack(ba.stackNumber, ba.destinationTile);
|
||||||
|
}
|
||||||
case 3: //defend
|
case 3: //defend
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -229,6 +233,7 @@ void CGameState::battle(CCreatureSet * army1, CCreatureSet * army2, int3 tile, C
|
|||||||
case 6: //walk or attack
|
case 6: //walk or attack
|
||||||
{
|
{
|
||||||
battleMoveCreatureStack(ba.stackNumber, ba.destinationTile);
|
battleMoveCreatureStack(ba.stackNumber, ba.destinationTile);
|
||||||
|
battleAttackCreatureStack(ba.stackNumber, ba.destinationTile);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -295,7 +300,7 @@ bool CGameState::battleMoveCreatureStack(int ID, int dest)
|
|||||||
accessibility[k] = true;
|
accessibility[k] = true;
|
||||||
for(int g=0; g<curB->stacks.size(); ++g)
|
for(int g=0; g<curB->stacks.size(); ++g)
|
||||||
{
|
{
|
||||||
if(curB->stacks[g]->owner == owner && curB->stacks[g]->ID != ID) //we don't want to lock enemy's positions and this units' position
|
if(curB->stacks[g]->ID != ID) //we don't want to lock enemy's positions and this units' position
|
||||||
{
|
{
|
||||||
accessibility[curB->stacks[g]->position] = false;
|
accessibility[curB->stacks[g]->position] = false;
|
||||||
if(curB->stacks[g]->creature->isDoubleWide()) //if it's a double hex creature
|
if(curB->stacks[g]->creature->isDoubleWide()) //if it's a double hex creature
|
||||||
@@ -307,6 +312,7 @@ bool CGameState::battleMoveCreatureStack(int ID, int dest)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
accessibility[dest] = true;
|
||||||
if(curStack->creature->isDoubleWide()) //locking positions unreachable by two-hex creatures
|
if(curStack->creature->isDoubleWide()) //locking positions unreachable by two-hex creatures
|
||||||
{
|
{
|
||||||
bool mac[187];
|
bool mac[187];
|
||||||
@@ -415,6 +421,23 @@ bool CGameState::battleMoveCreatureStack(int ID, int dest)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CGameState::battleAttackCreatureStack(int ID, int dest)
|
||||||
|
{
|
||||||
|
int attackedCreaure = -1; //-1 - there is no attacked creature
|
||||||
|
for(int b=0; b<curB->stacks.size(); ++b) //TODO: make upgrades for two-hex cres.
|
||||||
|
{
|
||||||
|
if(curB->stacks[b]->position == dest)
|
||||||
|
{
|
||||||
|
attackedCreaure = curB->stacks[b]->ID;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(attackedCreaure == -1)
|
||||||
|
return false;
|
||||||
|
//LOCPLINT->cb->
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<int> CGameState::battleGetRange(int ID)
|
std::vector<int> CGameState::battleGetRange(int ID)
|
||||||
{
|
{
|
||||||
int initialPlace=-1; //position of unit
|
int initialPlace=-1; //position of unit
|
||||||
|
@@ -90,6 +90,7 @@ private:
|
|||||||
}
|
}
|
||||||
void battle(CCreatureSet * army1, CCreatureSet * army2, int3 tile, CArmedInstance *hero1, CArmedInstance *hero2);
|
void battle(CCreatureSet * army1, CCreatureSet * army2, int3 tile, CArmedInstance *hero1, CArmedInstance *hero2);
|
||||||
bool battleMoveCreatureStack(int ID, int dest);
|
bool battleMoveCreatureStack(int ID, int dest);
|
||||||
|
bool battleAttackCreatureStack(int ID, int dest);
|
||||||
std::vector<int> battleGetRange(int ID); //called by std::vector<int> CCallback::battleGetAvailableHexes(int ID);
|
std::vector<int> battleGetRange(int ID); //called by std::vector<int> CCallback::battleGetAvailableHexes(int ID);
|
||||||
public:
|
public:
|
||||||
friend CCallback;
|
friend CCallback;
|
||||||
|
4
CMT.cpp
4
CMT.cpp
@@ -837,10 +837,10 @@ int _tmain(int argc, _TCHAR* argv[])
|
|||||||
}
|
}
|
||||||
std::cout<<"Opening map file: "<<mapname<<"\t\t"<<std::flush;
|
std::cout<<"Opening map file: "<<mapname<<"\t\t"<<std::flush;
|
||||||
gzFile map = gzopen(mapname.c_str(),"rb");
|
gzFile map = gzopen(mapname.c_str(),"rb");
|
||||||
std::string mapstr;int pom;
|
std::vector<unsigned char> mapstr; int pom;
|
||||||
while((pom=gzgetc(map))>=0)
|
while((pom=gzgetc(map))>=0)
|
||||||
{
|
{
|
||||||
mapstr+=pom;
|
mapstr.push_back(pom);
|
||||||
}
|
}
|
||||||
gzclose(map);
|
gzclose(map);
|
||||||
unsigned char *initTable = new unsigned char[mapstr.size()];
|
unsigned char *initTable = new unsigned char[mapstr.size()];
|
||||||
|
@@ -2073,6 +2073,11 @@ void CPlayerInterface::battleStackAttacking(int ID, int dest)
|
|||||||
dynamic_cast<CBattleInterface*>(curint)->stackAttacking(ID, dest);
|
dynamic_cast<CBattleInterface*>(curint)->stackAttacking(ID, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlayerInterface::battleStackIsAttacked(int ID)
|
||||||
|
{
|
||||||
|
dynamic_cast<CBattleInterface*>(curint)->stackIsAttacked(ID);
|
||||||
|
}
|
||||||
|
|
||||||
void CPlayerInterface::showComp(SComponent comp)
|
void CPlayerInterface::showComp(SComponent comp)
|
||||||
{
|
{
|
||||||
adventureInt->infoBar.showComp(&comp,4000);
|
adventureInt->infoBar.showComp(&comp,4000);
|
||||||
@@ -2933,22 +2938,23 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, StackState *State, boost::func
|
|||||||
anim->setType(1);
|
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
|
printAtMiddleWB(c->namePl,149,30,GEOR13,100,zwykly,bitmap); //creature name
|
||||||
|
|
||||||
//atttack
|
//atttack
|
||||||
printAt(CGI->preth->zelp[435].first,155,48,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->preth->zelp[435].first,155,48,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->attack,pom,10);
|
itoa(c->attack,pom,10);
|
||||||
if(State && State->attackBonus)
|
if(State && State->attackBonus)
|
||||||
{
|
{
|
||||||
int hlp = log10f(c->attack)+2;
|
int hlp = log10f(c->attack)+2;
|
||||||
pom[hlp-1] = ' '; pom[hlp] = '(';
|
pom[hlp-1] = ' '; pom[hlp] = '(';
|
||||||
itoa(c->attack+State->attackBonus,pom+hlp+1,10);
|
itoa(c->attack+State->attackBonus,pom+hlp+1,10);
|
||||||
pom[hlp+2+(int)log10f(State->attackBonus+c->attack)] = ')';
|
hlp += 2+(int)log10f(State->attackBonus+c->attack);
|
||||||
|
pom[hlp] = ')'; pom[hlp+1] = '\0';
|
||||||
}
|
}
|
||||||
printTo(pom,276,61,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,61,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
//defense
|
//defense
|
||||||
printAt(CGI->preth->zelp[436].first,155,67,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->preth->zelp[436].first,155,67,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->defence,pom,10);
|
itoa(c->defence,pom,10);
|
||||||
if(State && State->defenseBonus)
|
if(State && State->defenseBonus)
|
||||||
{
|
{
|
||||||
@@ -2957,36 +2963,36 @@ CCreInfoWindow::CCreInfoWindow(int Cid, int Type, StackState *State, boost::func
|
|||||||
itoa(c->defence+State->defenseBonus,pom+hlp+1,10);
|
itoa(c->defence+State->defenseBonus,pom+hlp+1,10);
|
||||||
pom[hlp+2+(int)log10f(State->defenseBonus+c->defence)] = ')';
|
pom[hlp+2+(int)log10f(State->defenseBonus+c->defence)] = ')';
|
||||||
}
|
}
|
||||||
printTo(pom,276,80,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,80,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
//shots
|
//shots
|
||||||
if(c->shots)
|
if(c->shots)
|
||||||
{
|
{
|
||||||
printAt(CGI->generaltexth->allTexts[198],155,86,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->generaltexth->allTexts[198],155,86,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->shots,pom,10);
|
itoa(c->shots,pom,10);
|
||||||
printTo(pom,276,99,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,99,GEOR13,zwykly,bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
//damage
|
//damage
|
||||||
printAt(CGI->generaltexth->allTexts[199],155,105,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->generaltexth->allTexts[199],155,105,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->damageMin,pom,10);
|
itoa(c->damageMin,pom,10);
|
||||||
hlp=log10f(c->damageMin)+2;
|
hlp=log10f(c->damageMin)+2;
|
||||||
pom[hlp-1]=' '; pom[hlp]='-'; pom[hlp+1]=' ';
|
pom[hlp-1]=' '; pom[hlp]='-'; pom[hlp+1]=' ';
|
||||||
itoa(c->damageMax,pom+hlp+2,10);
|
itoa(c->damageMax,pom+hlp+2,10);
|
||||||
printTo(pom,276,118,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,118,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
//health
|
//health
|
||||||
printAt(CGI->preth->zelp[439].first,155,124,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->preth->zelp[439].first,155,124,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->hitPoints,pom,10);
|
itoa(c->hitPoints,pom,10);
|
||||||
printTo(pom,276,137,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,137,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
//remaining health - TODO: show during the battles
|
//remaining health - TODO: show during the battles
|
||||||
//printAt(CGI->preth->zelp[440].first,155,143,GEOR13,zwykly,bitmap);
|
//printAt(CGI->preth->zelp[440].first,155,143,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
//speed
|
//speed
|
||||||
printAt(CGI->preth->zelp[441].first,155,162,GEOR13,zwykly,bitmap);
|
printAtWB(CGI->preth->zelp[441].first,155,162,GEOR13,100,zwykly,bitmap);
|
||||||
itoa(c->speed,pom,10);
|
itoa(c->speed,pom,10);
|
||||||
printTo(pom,276,175,GEOR13,zwykly,bitmap);
|
printToWB(pom,276,175,GEOR13,zwykly,bitmap);
|
||||||
|
|
||||||
|
|
||||||
//luck and morale
|
//luck and morale
|
||||||
@@ -3051,4 +3057,4 @@ void CCreInfoWindow::deactivate()
|
|||||||
dismiss->deactivate();
|
dismiss->deactivate();
|
||||||
if(upgrade)
|
if(upgrade)
|
||||||
upgrade->deactivate();
|
upgrade->deactivate();
|
||||||
}
|
}
|
||||||
|
@@ -341,6 +341,7 @@ public:
|
|||||||
void battleEnd(CCreatureSet * army1, CCreatureSet * army2, CArmedInstance *hero1, CArmedInstance *hero2, std::vector<int> capturedArtifacts, int expForWinner, bool winner);
|
void battleEnd(CCreatureSet * army1, CCreatureSet * army2, CArmedInstance *hero1, CArmedInstance *hero2, std::vector<int> capturedArtifacts, int expForWinner, bool winner);
|
||||||
void battleStackMoved(int ID, int dest, bool startMoving, bool endMoving);
|
void battleStackMoved(int ID, int dest, bool startMoving, bool endMoving);
|
||||||
void battleStackAttacking(int ID, int dest);
|
void battleStackAttacking(int ID, int dest);
|
||||||
|
void battleStackIsAttacked(int ID);
|
||||||
|
|
||||||
|
|
||||||
//-------------//
|
//-------------//
|
||||||
|
@@ -202,6 +202,36 @@ void CSDL_Ext::printTo(std::string text, int x, int y, TTF_Font * font, SDL_Colo
|
|||||||
SDL_UpdateRect(dst,x-temp->w,y-temp->h,temp->w,temp->h);
|
SDL_UpdateRect(dst,x-temp->w,y-temp->h,temp->w,temp->h);
|
||||||
SDL_FreeSurface(temp);
|
SDL_FreeSurface(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSDL_Ext::printToWB(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor, SDL_Surface * dst, unsigned char quality)
|
||||||
|
{
|
||||||
|
if (text.length()==0)
|
||||||
|
return;
|
||||||
|
SDL_Surface * temp;
|
||||||
|
switch (quality)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
temp = TTF_RenderText_Solid(font,text.c_str(),kolor);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
SDL_Color tem;
|
||||||
|
tem.b = 0xff-kolor.b;
|
||||||
|
tem.g = 0xff-kolor.g;
|
||||||
|
tem.r = 0xff-kolor.r;
|
||||||
|
tem.unused = 0xff-kolor.unused;
|
||||||
|
temp = TTF_RenderText_Shaded(font,text.c_str(),kolor,tem);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
temp = TTF_RenderText_Blended(font,text.c_str(),kolor);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
temp = TTF_RenderText_Blended(font,text.c_str(),kolor);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SDL_BlitSurface(temp,NULL,dst,&genRect(temp->h,temp->w,x-temp->w,y-temp->h));
|
||||||
|
SDL_FreeSurface(temp);
|
||||||
|
}
|
||||||
|
|
||||||
void CSDL_Ext::SDL_PutPixel(SDL_Surface *ekran, int x, int y, Uint8 R, Uint8 G, Uint8 B, int myC, Uint8 A)
|
void CSDL_Ext::SDL_PutPixel(SDL_Surface *ekran, int x, int y, Uint8 R, Uint8 G, Uint8 B, int myC, Uint8 A)
|
||||||
{
|
{
|
||||||
Uint8 *p = (Uint8 *)ekran->pixels + y * ekran->pitch + x * ekran->format->BytesPerPixel-myC;
|
Uint8 *p = (Uint8 *)ekran->pixels + y * ekran->pitch + x * ekran->format->BytesPerPixel-myC;
|
||||||
|
@@ -39,6 +39,7 @@ namespace CSDL_Ext
|
|||||||
//void fullAlphaTransform(SDL_Surface *& src); //performs first and second alpha transform
|
//void fullAlphaTransform(SDL_Surface *& src); //performs first and second alpha transform
|
||||||
Uint32 colorToUint32(const SDL_Color * color); //little endian only
|
Uint32 colorToUint32(const SDL_Color * color); //little endian only
|
||||||
void printTo(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
void printTo(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||||
|
void printToWB(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2);// quality: 0 - lowest, 1 - medium, 2 - highest; prints at right bottom corner of specific area. position of corner indicated by (x, y)
|
||||||
void printAtMiddle(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2); // quality: 0 - lowest, 1 - medium, 2 - highest
|
void printAtMiddle(std::string text, int x, int y, TTF_Font * font, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen, unsigned char quality = 2); // quality: 0 - lowest, 1 - medium, 2 - highest
|
||||||
void printAtMiddleWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
void printAtMiddleWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||||
void printAtWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
void printAtWB(std::string text, int x, int y, TTF_Font * font, int charpr, SDL_Color kolor=tytulowy, SDL_Surface * dst=screen);
|
||||||
|
@@ -937,39 +937,6 @@ int CCreatureAnimation::nextFrame(SDL_Surface *dest, int x, int y, bool attacker
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//for (int i=0; i<FullHeight; ++i)
|
|
||||||
//{
|
|
||||||
// for (int j=0;j<FullWidth+add;j++)
|
|
||||||
// {
|
|
||||||
// if( i+y<dest->h && j+x<dest->w && i+y>=0 && j+x>=0)
|
|
||||||
// {
|
|
||||||
// unsigned char coln = FTemp[i*(FullWidth+add)+j]; //number of color from palette
|
|
||||||
// if(coln==0)
|
|
||||||
// continue;
|
|
||||||
// unsigned char* ptr = ((unsigned char*)dest->pixels + dest->format->BytesPerPixel * ((i + y)*dest->w + j + x));
|
|
||||||
// if(coln>7 || coln == 5) //normal or yellow border
|
|
||||||
// {
|
|
||||||
// *ptr = palette[coln].B;
|
|
||||||
// *(ptr+1) = palette[coln].G;
|
|
||||||
// *(ptr+2) = palette[coln].R;
|
|
||||||
// }
|
|
||||||
// else if(coln<5) //shadow
|
|
||||||
// {
|
|
||||||
// *ptr = ((*ptr) * (palette[coln].G + 50)) /200;
|
|
||||||
// *(ptr+1) = ((*(ptr+1)) * (palette[coln].G + 50)) /200 ;
|
|
||||||
// *(ptr+2) = ((*(ptr+2)) * (palette[coln].G + 50)) /200 ;
|
|
||||||
// }
|
|
||||||
// else if(coln == 6) //yellow border shadowed
|
|
||||||
// {
|
|
||||||
// *ptr = ((*ptr) + palette[coln-1].B) / 2;
|
|
||||||
// *(ptr+1) = ((*(ptr+1)) + palette[coln-1].G) / 2;
|
|
||||||
// *(ptr+2) = ((*(ptr+2)) + palette[coln-1].R) / 2;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//SDL_UpdateRect(dest, x, y, FullWidth+add, FullHeight);
|
//SDL_UpdateRect(dest, x, y, FullWidth+add, FullHeight);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user