Fix MMAI action mask bug

This commit is contained in:
Simeon Manolov
2026-01-07 17:31:08 +02:00
parent e933b2284d
commit 25bfab8aa8
+11 -8
View File
@@ -354,14 +354,23 @@ void Hex::setActionMask(const std::shared_ptr<ActiveStackInfo> & astackinfo, con
auto hexaction = static_cast<HexAction>(i);
if(n_cstack->unitSide() == a_cstack->unitSide())
return;
continue;
if(hexaction <= HexAction::AMOVE_TL)
{
ASSERT(CStack::isMeleeAttackPossible(a_cstack, n_cstack, bhex), "vcmi says melee attack is IMPOSSIBLE [1]");
actmask.set(i);
}
else if(hexaction > HexAction::AMOVE_2BR)
else if(hexaction <= HexAction::AMOVE_2BR)
{
// only wide R stacks can perform 2TR/2R/2BR attacks
if(a_cstack->unitSide() == BattleSide::DEFENDER && a_cstack->doubleWide())
{
ASSERT(CStack::isMeleeAttackPossible(a_cstack, n_cstack, bhex), "vcmi says melee attack is IMPOSSIBLE [2]");
actmask.set(i);
}
}
else
{
// only wide L stacks can perform 2TL/2L/2BL attacks
if(a_cstack->unitSide() == BattleSide::ATTACKER && a_cstack->doubleWide())
@@ -370,12 +379,6 @@ void Hex::setActionMask(const std::shared_ptr<ActiveStackInfo> & astackinfo, con
actmask.set(i);
}
}
// only wide R stacks can perform 2TR/2R/2BR attacks
else if(a_cstack->unitSide() == BattleSide::DEFENDER && a_cstack->doubleWide())
{
ASSERT(CStack::isMeleeAttackPossible(a_cstack, n_cstack, bhex), "vcmi says melee attack is IMPOSSIBLE [2]");
actmask.set(i);
}
}
}
}