feat(combat): grant soft cover (+4 AC) to ranged attacks through creatures
This commit is contained in:
@@ -88,3 +88,31 @@ def test_cover_melee_uses_same_corner_rule_in_phase0() -> None:
|
||||
def test_cover_same_square_is_false() -> None:
|
||||
grid = make_grid(["."])
|
||||
assert has_cover(grid, (0, 0), (0, 0), ranged=True) is False
|
||||
|
||||
|
||||
def test_soft_cover_creature_between_grants_cover() -> None:
|
||||
"""A creature between shooter and target grants cover on ranged attacks."""
|
||||
grid = make_grid([".....", ".....", "....."])
|
||||
occupied = frozenset({(1, 2)})
|
||||
assert has_cover(grid, (1, 0), (1, 4), ranged=True, occupied=occupied) is True
|
||||
|
||||
|
||||
def test_soft_cover_melee_ignores_creatures() -> None:
|
||||
"""Melee attacks ignore creatures for soft cover (CRB: ranged only)."""
|
||||
grid = make_grid([".....", ".....", "....."])
|
||||
occupied = frozenset({(1, 2)})
|
||||
assert has_cover(grid, (1, 0), (1, 4), ranged=False, occupied=occupied) is False
|
||||
|
||||
|
||||
def test_soft_cover_creature_behind_target_ignored() -> None:
|
||||
"""A creature behind the target does not grant cover."""
|
||||
grid = make_grid(["......", "......"])
|
||||
occupied = frozenset({(1, 5)})
|
||||
assert has_cover(grid, (1, 0), (1, 4), ranged=True, occupied=occupied) is False
|
||||
|
||||
|
||||
def test_soft_cover_creature_off_axis_ignored() -> None:
|
||||
"""A creature off the attack line does not grant cover."""
|
||||
grid = make_grid([".....", "....."])
|
||||
occupied = frozenset({(0, 2)})
|
||||
assert has_cover(grid, (1, 0), (1, 4), ranged=True, occupied=occupied) is False
|
||||
|
||||
Reference in New Issue
Block a user