From dc2f3cf181d7a0d28fa07514b7198d8a6e9ca121 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 25 Aug 2010 14:57:58 +0000 Subject: [PATCH] - some fixes for town events - #190 - InfoWindow components adjusted vertically - #194 - correct sex for heroes in battles --- client/CBattleInterface.cpp | 10 +- client/CHeroWindow.cpp | 9 +- client/CMessage.cpp | 26 +-- config/battleHeroes.txt | 8 +- config/heroes_sec_skills.txt | 316 +++++++++++++++++------------------ hch/CHeroHandler.cpp | 3 + hch/CHeroHandler.h | 1 + hch/CObjectHandler.cpp | 3 + lib/CGameState.cpp | 11 ++ lib/map.cpp | 7 +- server/CGameHandler.cpp | 31 ++-- server/CGameHandler.h | 3 +- 12 files changed, 230 insertions(+), 198 deletions(-) diff --git a/client/CBattleInterface.cpp b/client/CBattleInterface.cpp index f81f89ae0..1ae0a7044 100644 --- a/client/CBattleInterface.cpp +++ b/client/CBattleInterface.cpp @@ -1217,7 +1217,10 @@ CBattleInterface::CBattleInterface(const CCreatureSet * army1, const CCreatureSe //loading hero animations if(hero1) // attacking hero { - attackingHero = new CBattleHero(graphics->battleHeroes[hero1->type->heroType], 0, 0, false, hero1->tempOwner, hero1->tempOwner == curInt->playerID ? hero1 : NULL, this); + int type = hero1->type->heroType; + if ( type % 2 ) type--; + if ( hero1->sex ) type++; + attackingHero = new CBattleHero(graphics->battleHeroes[type], 0, 0, false, hero1->tempOwner, hero1->tempOwner == curInt->playerID ? hero1 : NULL, this); attackingHero->pos = genRect(attackingHero->dh->ourImages[0].bitmap->h, attackingHero->dh->ourImages[0].bitmap->w, -40 + pos.x, pos.y); } else @@ -1226,7 +1229,10 @@ CBattleInterface::CBattleInterface(const CCreatureSet * army1, const CCreatureSe } if(hero2) // defending hero { - defendingHero = new CBattleHero(graphics->battleHeroes[hero2->type->heroType], 0, 0, true, hero2->tempOwner, hero2->tempOwner == curInt->playerID ? hero2 : NULL, this); + int type = hero2->type->heroType; + if ( type % 2 ) type--; + if ( hero2->sex ) type++; + defendingHero = new CBattleHero(graphics->battleHeroes[type ], 0, 0, true, hero2->tempOwner, hero2->tempOwner == curInt->playerID ? hero2 : NULL, this); defendingHero->pos = genRect(defendingHero->dh->ourImages[0].bitmap->h, defendingHero->dh->ourImages[0].bitmap->w, 690 + pos.x, pos.y); } else diff --git a/client/CHeroWindow.cpp b/client/CHeroWindow.cpp index 3d61c82a1..4a043970f 100644 --- a/client/CHeroWindow.cpp +++ b/client/CHeroWindow.cpp @@ -422,10 +422,11 @@ void CHeroWindow::redrawCurBack() CSDL_Ext::printAtMiddle(curHero->name, 190, 38, FONT_BIG, tytulowy, curBack); //printing hero's level - std::ostringstream secondLine; - secondLine<<"Level "<level<<" "<type->heroClass->name; - CSDL_Ext::printAtMiddle(secondLine.str(), 190, 65, FONT_MEDIUM, zwykly, curBack); - + std::string secondLine= CGI->generaltexth->allTexts[342]; + boost::algorithm::replace_first(secondLine,"%d",boost::lexical_cast(curHero->level)); + boost::algorithm::replace_first(secondLine,"%s",curHero->type->heroClass->name); + CSDL_Ext::printAtMiddle(secondLine, 190, 65, FONT_MEDIUM, zwykly, curBack); + //primary skills names CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[1], 52, 99, FONT_SMALL, tytulowy, curBack); CSDL_Ext::printAtMiddle(CGI->generaltexth->jktexts[2], 123, 99, FONT_SMALL, tytulowy, curBack); diff --git a/client/CMessage.cpp b/client/CMessage.cpp index e6404388d..3dc71f0e6 100644 --- a/client/CMessage.cpp +++ b/client/CMessage.cpp @@ -592,39 +592,43 @@ ComponentsToBlit::ComponentsToBlit(std::vector & SComps, int maxw, void ComponentsToBlit::blitCompsOnSur( SDL_Surface * _or, int inter, int &curh, SDL_Surface *ret ) { - for (size_t i=0;icomp->pos.w; - amax(maxh,cur->comp->pos.h+BETWEEN_COMPS_ROWS); + amax(maxh,cur->comp->getImg()->h);//subtitles height will added later } if(_or) { totalw += (inter*2+_or->w) * ((comps)[i].size() - 1); } - else + else//add space between comps in this row { totalw += (inter) * ((comps)[i].size() - 1); } curh+=maxh/2; + int compX, compY; + int curw = (ret->w/2)-(totalw/2); for(size_t j=0;j<(comps)[i].size();j++) { ComponentResolved *cur = (comps)[i][j]; //blit img - int hlp = curh-(cur->comp->pos.h)/2; - blitAt(cur->img, curw + (cur->comp->pos.w - cur->comp->getImg()->w)/2, hlp, ret); - cur->comp->pos.x = curw; - cur->comp->pos.y = hlp; + compX = curw + ( cur->comp->pos.w - cur->comp->getImg()->w ) / 2; + compY = curh - cur->comp->getImg()->h / 2; + blitAt(cur->img, compX, compY, ret); + cur->comp->pos.x = compX; + cur->comp->pos.y = compY; //blit subtitle - hlp += cur->img->h + COMPONENT_TO_SUBTITLE; - CMessage::blitTextOnSur(cur->txt, cur->txtFontHeight, hlp, ret, cur->comp->pos.x + cur->comp->pos.w/2 ); + compX += cur->comp->getImg()->w/2; + compY = curh + maxh / 2 + COMPONENT_TO_SUBTITLE; + CMessage::blitTextOnSur(cur->txt, cur->txtFontHeight, compY, ret, compX ); //if there is subsequent component blit "or" curw += cur->comp->pos.w; @@ -639,6 +643,6 @@ void ComponentsToBlit::blitCompsOnSur( SDL_Surface * _or, int inter, int &curh, curw+=inter; } } - curh+=maxh/2; + curh = compY+BETWEEN_COMPS_ROWS; } } diff --git a/config/battleHeroes.txt b/config/battleHeroes.txt index c2b1eca4d..ec85d6cb5 100644 --- a/config/battleHeroes.txt +++ b/config/battleHeroes.txt @@ -3,17 +3,19 @@ CH00.DEF CH01.DEF CH02.DEF CH03.DEF -CH04.DEF CH05.DEF +CH04.DEF CH06.DEF CH07.DEF CH08.DEF CH09.DEF CH010.DEF CH11.DEF -CH012.DEF CH013.DEF +CH012.DEF CH014.DEF CH015.DEF CH16.DEF -CH17.DEF \ No newline at end of file +CH17.DEF + +hero animation used in battles, each 2 def represent male and female heroes for each race \ No newline at end of file diff --git a/config/heroes_sec_skills.txt b/config/heroes_sec_skills.txt index 64b507572..8203dfd30 100644 --- a/config/heroes_sec_skills.txt +++ b/config/heroes_sec_skills.txt @@ -1,158 +1,158 @@ -//heroes'_inintial_set_of_secondary_abilities_format:_heroID_numberOfInitialSecSkills_(Skill_ID,_skill_lvl_for_every_spell) -0 2 6 1 1 1 -1 2 6 1 1 1 -2 2 6 1 23 1 -3 2 6 1 5 1 -4 2 6 1 13 1 -5 2 6 1 22 1 -6 2 6 1 20 1 -7 2 6 1 19 1 -8 2 7 1 27 1 -9 2 7 1 4 1 -10 2 7 1 13 1 -11 1 7 2 -12 2 7 1 8 1 -13 2 7 1 11 1 -14 2 7 1 21 1 -15 2 7 1 24 1 -16 2 6 1 23 1 -17 2 9 1 26 1 -18 1 1 2 -19 2 4 1 6 1 -20 1 26 2 -21 2 1 1 22 1 -22 2 0 1 26 1 -23 2 1 1 2 1 -24 2 7 1 18 1 -25 2 7 2 10 1 -26 2 7 1 24 1 -27 2 7 1 27 1 -28 2 7 1 11 1 -29 2 7 1 9 1 -30 2 7 1 25 1 -31 2 7 1 3 1 -32 2 3 1 8 1 -33 1 18 2 -34 2 8 1 25 1 -35 2 18 1 23 1 -36 2 8 1 19 1 -37 2 18 1 26 1 -38 2 8 1 22 1 -39 2 18 1 24 1 -40 1 7 2 -41 2 7 1 8 1 -42 2 7 1 11 1 -43 2 7 1 24 1 -44 2 7 1 10 1 -45 2 7 1 25 1 -46 2 7 1 4 1 -47 2 7 1 18 1 -48 1 3 2 -49 2 7 1 18 1 -50 1 23 2 -51 2 19 1 26 1 -52 2 18 1 22 1 -53 2 1 1 3 1 -54 2 20 1 2 1 -55 1 22 2 -56 2 7 1 24 1 -57 2 7 1 18 1 -58 2 7 1 8 1 -59 2 7 1 10 1 -60 2 7 1 21 1 -61 2 7 1 11 1 -62 2 7 1 25 1 -63 2 7 1 6 1 -64 2 12 1 26 1 -65 2 12 1 20 1 -66 2 12 1 21 1 -67 2 12 1 19 1 -68 2 12 1 22 1 -69 1 12 2 -70 2 12 1 22 1 -71 2 12 1 23 1 -72 2 12 1 18 1 -73 2 12 1 7 1 -74 2 12 1 25 1 -75 2 12 1 11 1 -76 2 12 1 8 1 -77 2 12 1 21 1 -78 1 12 2 -79 2 12 1 24 1 -80 2 3 1 6 1 -81 2 20 1 22 1 -82 2 19 1 22 1 -83 2 6 1 26 1 -84 1 22 2 -85 2 2 1 19 1 -86 2 6 1 18 1 -87 2 19 1 22 1 -88 2 7 1 18 1 -89 2 7 1 8 1 -90 2 7 1 25 1 -91 1 7 2 -92 2 7 1 11 1 -93 2 7 1 3 2 -94 2 7 1 24 1 -95 2 7 1 21 1 -96 2 22 1 10 1 -97 2 22 1 20 1 -98 2 22 1 1 1 -99 2 22 1 3 1 -100 2 22 1 0 1 -101 2 22 1 26 1 -102 1 22 2 -103 2 22 1 19 1 -104 2 7 1 25 1 -105 2 7 1 6 1 -106 2 7 1 2 1 -107 2 7 1 19 1 -108 2 7 1 20 1 -109 2 7 1 22 1 -110 2 7 1 11 1 -111 2 7 1 26 1 -112 2 23 1 26 1 -113 2 23 1 6 1 -114 2 23 1 1 1 -115 1 23 2 -116 2 23 1 22 1 -117 2 23 1 0 1 -118 2 23 1 20 1 -119 2 23 1 3 1 -120 1 7 2 -121 2 7 1 8 1 -122 2 7 1 5 1 -123 2 7 1 27 1 -124 2 7 1 21 1 -125 2 7 1 25 1 -126 2 7 1 24 1 -127 2 7 1 11 1 -128 2 20 1 22 1 -129 2 13 1 19 1 -130 2 20 1 22 1 -131 1 19 2 -132 2 2 1 22 1 -133 2 13 1 19 1 -134 1 22 2 -135 2 19 1 21 1 -136 2 7 1 14 1 -137 2 7 1 15 1 -138 2 7 1 16 1 -139 2 7 1 17 1 -140 2 7 1 14 1 -141 2 7 1 15 1 -142 2 7 1 16 1 -143 2 7 1 17 1 -144 1 6 2 -145 2 7 1 14 3 -146 2 6 1 22 1 -147 1 7 2 -148 2 1 1 6 1 -149 1 22 2 -150 1 12 2 -151 2 13 1 19 1 -152 2 6 1 23 1 -153 2 13 1 19 1 -154 2 19 1 22 1 -155 2 6 1 19 1 --1 \ No newline at end of file +//heroes'_inintial_set_of_secondary_abilities_format:_heroID,_sex_numberOfInitialSecSkills_(Skill_ID,_skill_lvl_for_every_skill) +0 0 2 6 1 1 1 +1 1 2 6 1 1 1 +2 0 2 6 1 23 1 +3 1 2 6 1 5 1 +4 0 2 6 1 13 1 +5 1 2 6 1 22 1 +6 0 2 6 1 20 1 +7 1 2 6 1 19 1 +8 0 2 7 1 27 1 +9 1 2 7 1 4 1 +10 0 2 7 1 13 1 +11 1 1 7 2 +12 0 2 7 1 8 1 +13 1 2 7 1 11 1 +14 0 2 7 1 21 1 +15 1 2 7 1 24 1 +16 1 2 6 1 23 1 +17 0 2 9 1 26 1 +18 1 1 1 2 +19 0 2 4 1 6 1 +20 0 1 26 2 +21 0 2 1 1 22 1 +22 0 2 0 1 26 1 +23 1 2 1 1 2 1 +24 0 2 7 1 18 1 +25 0 2 7 2 10 1 +26 0 2 7 1 24 1 +27 1 2 7 1 27 1 +28 0 2 7 1 11 1 +29 1 2 7 1 9 1 +30 0 2 7 1 25 1 +31 0 2 7 1 3 1 +32 0 2 3 1 8 1 +33 0 1 18 2 +34 1 2 8 1 25 1 +35 1 2 18 1 23 1 +36 0 2 8 1 19 1 +37 0 2 18 1 26 1 +38 1 2 8 1 22 1 +39 1 2 18 1 24 1 +40 0 1 7 2 +41 0 2 7 1 8 1 +42 1 2 7 1 11 1 +43 1 2 7 1 24 1 +44 0 2 7 1 10 1 +45 0 2 7 1 25 1 +46 1 2 7 1 4 1 +47 1 2 7 1 18 1 +48 1 1 3 2 +49 0 2 7 1 18 1 +50 1 1 23 2 +51 0 2 19 1 26 1 +52 1 2 18 1 22 1 +53 0 2 1 1 3 1 +54 1 2 20 1 2 1 +55 1 1 22 2 +56 0 2 7 1 24 1 +57 0 2 7 1 18 1 +58 0 2 7 1 8 1 +59 1 2 7 1 10 1 +60 0 2 7 1 21 1 +61 1 2 7 1 11 1 +62 0 2 7 1 25 1 +63 0 2 7 1 6 1 +64 0 2 12 1 26 1 +65 0 2 12 1 20 1 +66 0 2 12 1 21 1 +67 1 2 12 1 19 1 +68 1 2 12 1 22 1 +69 1 1 12 2 +70 0 2 12 1 22 1 +71 0 2 12 1 23 1 +72 1 2 12 1 18 1 +73 1 2 12 1 7 1 +74 0 2 12 1 25 1 +75 0 2 12 1 11 1 +76 0 2 12 1 8 1 +77 1 2 12 1 21 1 +78 1 1 12 2 +79 0 2 12 1 24 1 +80 1 2 3 1 6 1 +81 0 2 20 1 22 1 +82 0 2 19 1 22 1 +83 0 2 6 1 26 1 +84 0 1 22 2 +85 0 2 2 1 19 1 +86 1 2 6 1 18 1 +87 0 2 19 1 22 1 +88 0 2 7 1 18 1 +89 0 2 7 1 8 1 +90 0 2 7 1 25 1 +91 1 1 7 2 +92 0 2 7 1 11 1 +93 0 2 7 1 3 2 +94 1 2 7 1 24 1 +95 0 2 7 1 21 1 +96 0 2 22 1 10 1 +97 0 2 22 1 20 1 +98 0 2 22 1 1 1 +99 1 2 22 1 3 1 +100 1 2 22 1 0 1 +101 0 2 22 1 26 1 +102 0 1 22 2 +103 0 2 22 1 19 1 +104 1 2 7 1 25 1 +105 0 2 7 1 6 1 +106 1 2 7 1 2 1 +107 0 2 7 1 19 1 +108 0 2 7 1 20 1 +109 1 2 7 1 22 1 +110 1 2 7 1 11 1 +111 0 2 7 1 26 1 +112 0 2 23 1 26 1 +113 0 2 23 1 6 1 +114 0 2 23 1 1 1 +115 0 1 23 2 +116 0 2 23 1 22 1 +117 0 2 23 1 0 1 +118 0 2 23 1 20 1 +119 0 2 23 1 3 1 +120 1 1 7 2 +121 1 2 7 1 8 1 +122 1 2 7 1 5 1 +123 1 2 7 1 27 1 +124 1 2 7 1 21 1 +125 1 2 7 1 25 1 +126 1 2 7 1 24 1 +127 1 2 7 1 11 1 +128 1 2 20 1 22 1 +129 1 2 13 1 19 1 +130 1 2 20 1 22 1 +131 1 1 19 2 +132 0 2 2 1 22 1 +133 0 2 13 1 19 1 +134 0 1 22 2 +135 0 2 19 1 21 1 +136 1 2 7 1 14 1 +137 1 2 7 1 15 1 +138 1 2 7 1 16 1 +139 1 2 7 1 17 1 +140 0 2 7 1 14 1 +141 0 2 7 1 15 1 +142 0 2 7 1 16 1 +143 0 2 7 1 17 1 +144 0 1 6 2 +145 1 2 7 1 14 3 +146 1 2 6 1 22 1 +147 0 1 7 2 +148 0 2 1 1 6 1 +149 0 1 22 2 +150 0 1 12 2 +151 1 2 13 1 19 1 +152 0 2 6 1 23 1 +153 1 2 13 1 19 1 +154 0 2 19 1 22 1 +155 0 2 6 1 19 1 +-1 diff --git a/hch/CHeroHandler.cpp b/hch/CHeroHandler.cpp index b923b7408..8470c4452 100644 --- a/hch/CHeroHandler.cpp +++ b/hch/CHeroHandler.cpp @@ -304,6 +304,8 @@ void CHeroHandler::loadHeroes() if(hid == -1) break; inp>>secQ; + heroes[hid]->sex = secQ; + inp>>secQ; for(int g=0; ggetTextFile("BALLIST.TXT"); diff --git a/hch/CHeroHandler.h b/hch/CHeroHandler.h index 7f73de1f0..7010d352f 100644 --- a/hch/CHeroHandler.h +++ b/hch/CHeroHandler.h @@ -42,6 +42,7 @@ public: std::vector > secSkillsInit; //initial secondary skills; first - ID of skill, second - level of skill (1 - basic, 2 - adv., 3 - expert) std::vector spec; si32 startingSpell; //-1 if none + ui8 sex; // default sex: 0=male, 1=female //bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;} CHero(); diff --git a/hch/CObjectHandler.cpp b/hch/CObjectHandler.cpp index 4e9f79ea1..ce15f59ed 100644 --- a/hch/CObjectHandler.cpp +++ b/hch/CObjectHandler.cpp @@ -842,6 +842,9 @@ void CGHeroInstance::initHero() level = VLC->heroh->level(exp); } + if (sex == 0xFF)//sex is default + sex = type->sex; + setFormation(false); if (!stacksCount()) //standard army//initial army { diff --git a/lib/CGameState.cpp b/lib/CGameState.cpp index 9bac60a79..5d084f7d1 100644 --- a/lib/CGameState.cpp +++ b/lib/CGameState.cpp @@ -1732,6 +1732,17 @@ void CGameState::init( StartInfo * si, ui32 checksum, int Seed ) vti->builtBuildings.insert(25); } } + + for (std::list::iterator ev=vti->events.begin(); ev!=vti->events.end(); ev++) + for (int i = 0; ibuildings,(-31-i))) //if we have horde for this level + { + (*ev)->buildings.erase(-31-i); + if (vti->town->hordeLvl[0] == i) + (*ev)->buildings.insert(18); + if (vti->town->hordeLvl[1] == i) + (*ev)->buildings.insert(24); + } //init spells vti->spells.resize(SPELL_LEVELS); CSpell *s; diff --git a/lib/map.cpp b/lib/map.cpp index 653186f9c..d93de0ae1 100644 --- a/lib/map.cpp +++ b/lib/map.cpp @@ -905,8 +905,13 @@ void Mapa::loadHero( CGObjectInstance * &nobj, const unsigned char * bufor, int { if(readChar(bufor,i))//true if hero has nonstandard (mapmaker defined) biography nhi->biography = readString(bufor,i); - nhi->sex = !(bufor[i]); ++i; + nhi->sex = bufor[i]; ++i; + + if (nhi->sex != 0xFF)//remove trash + nhi->sex &=1; } + else + nhi->sex = 0xFF; //spells if(version>AB) { diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index bd5cc77ed..b1ba9da43 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -1123,6 +1123,9 @@ void CGameHandler::newTurn() } //n.res.push_back(r); } + // townID, creatureID, amount + std::map > newCreas;//creatures that needs to be added by town events + for(std::vector::iterator j = gs->map->towns.begin(); j!=gs->map->towns.end(); j++)//handle towns { ui8 player = (*j)->tempOwner; @@ -1152,7 +1155,7 @@ void CGameHandler::newTurn() } n.res[player][6] += (**j).dailyIncome(); } - handleTownEvents(*j, n); + handleTownEvents(*j, n, newCreas); if (vstd::contains((**j).builtBuildings, 26)) { switch ((**j).subID) @@ -1215,6 +1218,11 @@ void CGameHandler::newTurn() amin(sac.creatures[k].first, VLC->creh->creatures[(*j)->town->basicCreatures[k]]->growth); } } + //creatures from town events + if (vstd::contains(newCreas, (**j).id)) + for(std::map::iterator i=newCreas[(**j).id].begin() ; i!=newCreas[(**j).id].end(); i++) + sac.creatures[i->first].first += i->second; + n2.cres.push_back(sac); } if (gs->getDate(0) > 1) @@ -2783,7 +2791,7 @@ bool CGameHandler::buildStructure( si32 tid, si32 bid, bool force /*=false*/ ) } ns.bid.insert(bid); - ns.builded = t->builded + 1; + ns.builded = force?t->builded:(t->builded+1); sendAndApply(&ns); //reveal ground for lookout tower @@ -4488,7 +4496,7 @@ void CGameHandler::handleTimeEvents() } } -void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n) +void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n, std::map > &newCreas) { town->events.sort(evntCmp); while(town->events.size() && town->events.front()->firstOccurence == gs->day) @@ -4525,28 +4533,15 @@ void CGameHandler::handleTownEvents(CGTownInstance * town, NewTurn &n) iw.components.push_back(Component(Component::BUILDING, town->subID, *i, 0)); } - SetAvailableCreatures sac; - if (n.cres.empty() || n.cres.back().tid != town->id) - { - sac.tid = town->id; - sac.creatures = town->creatures; - } - else - { - sac = n.cres.back(); - n.cres.pop_back(); - } - - for(int i=0;icreatures.size();i++) //creature growths + for(si32 i=0;icreatures.size();i++) //creature growths { if(town->creatureDwelling(i) && ev->creatures[i])//there is dwelling { - sac.creatures[i].first += ev->creatures[i]; + newCreas[town->id][i] += ev->creatures[i]; iw.components.push_back(Component(Component::CREATURE, town->creatures[i].second.back(), ev->creatures[i], 0)); } } - n.cres.push_back(sac); sendAndApply(&iw); //show dialog } diff --git a/server/CGameHandler.h b/server/CGameHandler.h index 8d118d641..90089d521 100644 --- a/server/CGameHandler.h +++ b/server/CGameHandler.h @@ -3,6 +3,7 @@ #include "../global.h" #include +#include #include "../client/FunctionList.h" #include "../lib/CGameState.h" #include "../lib/Connection.h" @@ -194,7 +195,7 @@ public: void save(const std::string &fname); void close(); void handleTimeEvents(); - void handleTownEvents(CGTownInstance *town, NewTurn &n); + void handleTownEvents(CGTownInstance *town, NewTurn &n, std::map > &newCreas); bool complain(const std::string &problem); //sends message to all clients, prints on the logs and return true void objectVisited( const CGObjectInstance * obj, const CGHeroInstance * h ); void engageIntoBattle( ui8 player );