std::vector<std::shared_ptr<constCObstacleInstance>>battleGetAllObstaclesOnPos(BattleHextile,boolonlyBlocking=true)const;//blocking obstacles makes tile inaccessible, others cause special effects (like Land Mines, Moat, Quicksands)
std::vector<BattleHex>battleGetAvailableHexes(constCStack*stack,booladdOccupiable,std::vector<BattleHex>*attackable=nullptr)const;//returns hexes reachable by creature with id ID (valid movement destinations), DOES contain stack current position
ReachabilityInfo::TDistancesbattleGetDistances(constCStack*stack,BattleHexhex=BattleHex::INVALID,BattleHex*predecessors=nullptr)const;//returns vector of distances to [dest hex number]
boolbattleCanAttack(constCStack*stack,constCStack*target,BattleHexdest)const;//determines if stack with given ID can attack target at the selected destination
TDmgRangecalculateDmgRange(constBattleAttackInfo&info)const;//charge - number of hexes travelled before attack (for champion's jousting); returns pair <min dmg, max dmg>
//hextowallpart //int battleGetWallUnderHex(BattleHex hex) const; //returns part of destructible wall / gate / keep under given hex or -1 if not found
std::pair<ui32,ui32>battleEstimateDamage(CRandomGenerator&rand,constBattleAttackInfo&bai,std::pair<ui32,ui32>*retaliationDmg=nullptr)const;//estimates damage dealt by attacker to defender; it may be not precise especially when stack has randomly working bonuses; returns pair <min dmg, max dmg>
std::pair<ui32,ui32>battleEstimateDamage(CRandomGenerator&rand,constCStack*attacker,constCStack*defender,std::pair<ui32,ui32>*retaliationDmg=nullptr)const;//estimates damage dealt by attacker to defender; it may be not precise especially when stack has randomly working bonuses; returns pair <min dmg, max dmg>
EWallPart::EWallPartbattleHexToWallPart(BattleHexhex)const;//returns part of destructible wall / gate / keep under given hex or -1 if not found
boolisWallPartPotentiallyAttackable(EWallPart::EWallPartwallPart)const;// returns true if the wall part is potentially attackable (independent of wall state), false if not
si8battleMaxSpellLevel(ui8side)const;//calculates minimum spell level possible to be cast on battlefield - takes into account artifacts of both heroes; if no effects are set, 0 is returned
ESpellCastProblem::ESpellCastProblembattleCanCastSpell(constISpellCaster*caster,ECastingMode::ECastingModemode)const;//returns true if there are no general issues preventing from casting a spell
si8battleCanTeleportTo(constCStack*stack,BattleHexdestHex,inttelportLevel)const;//checks if teleportation of given stack to given position can take place
si8battleGetTacticDist()const;//returns tactic distance for calling player or 0 if this player is not in tactic phase (for ALL_KNOWING actual distance for tactic side)
AttackableTilesgetPotentiallyAttackableHexes(constCStack*attacker,BattleHexdestinationTile,BattleHexattackerPos,boolrangedAttack)const;//TODO: apply rotation to two-hex attacker
std::set<constCStack*>getAttackedCreatures(constCStack*attacker,BattleHexdestinationTile,boolrangedAttack,BattleHexattackerPos=BattleHex::INVALID)const;//calculates range of multi-hex attacks
boolisToReverse(BattleHexhexFrom,BattleHexhexTo,boolcurDir/*if true, creature is in attacker's direction*/,booltoDoubleWide,booltoDir)const;//determines if creature should be reversed (it stands on hexFrom and should 'see' hexTo)
boolisToReverseHlp(BattleHexhexFrom,BattleHexhexTo,boolcurDir)const;//helper for isToReverse