Add flying dodge mechanic at resolve time

When altitude differs at resolve time (attacker or defender changed flying state during window phase), attack misses. Treated as successful dodge with zero damage.
This commit is contained in:
Jared Miller 2026-02-14 00:08:50 -05:00
parent 4da8d41b45
commit d6d62abdb8
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C

View file

@ -123,6 +123,23 @@ class CombatEncounter:
combat_ended=False,
)
# Check for altitude mismatch (flying dodge)
attacker_flying = getattr(self.attacker, "flying", False)
defender_flying = getattr(self.defender, "flying", False)
if attacker_flying != defender_flying:
# Altitude mismatch - attack misses
template = "{attacker}'s attack miss{es}{defender} {is|is} out of reach!"
# Reset to IDLE
self.state = CombatState.IDLE
self.current_move = None
self.pending_defense = None
return ResolveResult(
resolve_template=template,
damage=0.0,
countered=True,
combat_ended=False,
)
# Check if defense counters attack
defense_succeeds = (
self.pending_defense